Som jag vet, PDO_MYSQLND
ersatte PDO_MYSQL
i PHP 5.3. Den förvirrande delen är att namnet fortfarande är PDO_MYSQL
. Så nu är ND standarddrivrutinen för MySQL+PDO.
Sammantaget, för att köra flera frågor samtidigt behöver du:
- PHP 5.3+
- mysqlnd
- Emulerade förberedda uttalanden. Se till att
PDO::ATTR_EMULATE_PREPARES
är inställd på1
(standard). Alternativt kan du undvika att använda förberedda satser och använda$pdo->exec
direkt.
Använder 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);
Använda uttalanden
$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();
En notering:
När du använder emulerade förberedda uttalanden, se till att du har ställt in korrekt kodning (som återspeglar faktisk datakodning) i DSN (tillgänglig sedan 5.3.6). Annars kan det finnas en liten möjlighet för SQL-injektion om någon udda kodning används .