私が知っているように、PDO_MYSQLND
PDO_MYSQL
を置き換えました PHP5.3で。紛らわしいのは、名前がまだPDO_MYSQL
であるということです。 。したがって、NDはMySQL+PDOのデフォルトドライバです。
全体として、一度に複数のクエリを実行するには、次のものが必要です。
- PHP 5.3+
- mysqlnd
- エミュレートされたプリペアドステートメント。
PDO::ATTR_EMULATE_PREPARES
を確認してください1
に設定されています (デフォルト)。または、プリペアドステートメントの使用を避け、$pdo->exec
を使用することもできます。 直接。
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);
ステートメントの使用
$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();
注:
エミュレートされたプリペアドステートメントを使用する場合は、 DSN (5.3.6以降で使用可能)。それ以外の場合、奇妙なエンコーディングが使用されていると、SQLインジェクションがわずかに発生する可能性があります 。