Come so, PDO_MYSQLND
sostituito PDO_MYSQL
in PHP 5.3. La parte confusa è che il nome è ancora PDO_MYSQL
. Quindi ora ND è il driver predefinito per MySQL+PDO.
Nel complesso, per eseguire più query contemporaneamente è necessario:
- PHP 5.3+
- mysqlnd
- Dichiarazioni preparate emulate. Assicurati di
PDO::ATTR_EMULATE_PREPARES
è impostato su1
(predefinito). In alternativa puoi evitare di usare istruzioni preparate e usare$pdo->exec
direttamente.
Utilizzo di 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);
Utilizzo delle dichiarazioni
$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();
Una nota:
Quando si utilizzano istruzioni preparate emulate, assicurarsi di aver impostato la codifica corretta (che rifletta la codifica dei dati effettiva) in DSN (disponibile da 5.3.6). Altrimenti potrebbe esserci una leggera possibilità di SQL injection se viene utilizzata una codifica dispari .