Como eu sei,
PDO_MYSQLND
substituiu PDO_MYSQL
em PHP 5.3. A parte confusa é que o nome ainda é PDO_MYSQL
. Então agora o ND é o driver padrão para MySQL+PDO. No geral, para executar várias consultas de uma só vez, você precisa:
- PHP 5.3+
- mysqlnd
- Declarações preparadas emuladas. Certifique-se de que
PDO::ATTR_EMULATE_PREPARES
está definido como1
(predefinição). Alternativamente, você pode evitar o uso de instruções preparadas e usar$pdo->exec
diretamente.
Usando executivo
$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);
Usando declarações
$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();
Uma observação:
Ao usar instruções preparadas emuladas, verifique se você definiu a codificação adequada (que reflete a codificação de dados real) em DSN (disponível desde 5.3.6). Caso contrário, pode haver uma pequena possibilidade de injeção de SQL se alguma codificação estranha for usada .