Jak vím, PDO_MYSQLND
nahradil PDO_MYSQL
v PHP 5.3. Matoucí je, že název je stále PDO_MYSQL
. Nyní je tedy ND výchozím ovladačem pro MySQL+PDO.
K provedení více dotazů najednou potřebujete:
- PHP 5.3+
- mysqlnd
- Emulované připravené příkazy. Ujistěte se, že
PDO::ATTR_EMULATE_PREPARES
je nastaven na1
(výchozí). Případně se můžete vyhnout použití připravených příkazů a použít$pdo->exec
přímo.
Pomocí 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);
Použití příkazů
$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();
Poznámka:
Při použití emulovaných připravených příkazů se ujistěte, že jste nastavili správné kódování (které odráží skutečné kódování dat) v DSN (k dispozici od 5.3.6). Jinak může existovat malá možnost vložení SQL, pokud se použije nějaké liché kódování .