Seperti yang saya tahu, PDO_MYSQLND
menggantikan PDO_MYSQL
di PHP 5.3. Bagian yang membingungkan adalah nama itu masih PDO_MYSQL
. Jadi sekarang ND adalah driver default untuk MySQL+PDO.
Secara keseluruhan, untuk menjalankan beberapa kueri sekaligus, Anda memerlukan:
- PHP 5.3+
- mysqlnd
- Emulasi pernyataan yang disiapkan. Pastikan
PDO::ATTR_EMULATE_PREPARES
disetel ke1
(bawaan). Atau Anda dapat menghindari penggunaan pernyataan yang disiapkan dan menggunakan$pdo->exec
secara langsung.
Menggunakan exec
$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
// works regardless of statements emulation
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
$sql = "
DELETE FROM car;
INSERT INTO car(name, type) VALUES ('car1', 'coupe');
INSERT INTO car(name, type) VALUES ('car2', 'coupe');
";
$db->exec($sql);
Menggunakan pernyataan
$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
// works not with the following set to 0. You can comment this line as 1 is default
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
$sql = "
DELETE FROM car;
INSERT INTO car(name, type) VALUES ('car1', 'coupe');
INSERT INTO car(name, type) VALUES ('car2', 'coupe');
";
$stmt = $db->prepare($sql);
$stmt->execute();
Catatan:
Saat menggunakan pernyataan siap yang ditiru, pastikan Anda telah menyetel penyandian yang tepat (yang mencerminkan penyandian data aktual) di DSN (tersedia sejak 5.3.6). Jika tidak, ada kemungkinan kecil untuk injeksi SQL jika beberapa penyandian aneh digunakan .