Както знам, PDO_MYSQLND
заменен PDO_MYSQL
в PHP 5.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 инжекция, ако се използва някакво странно кодиране .