Soweit ich weiß, PDO_MYSQLND
ersetzt PDO_MYSQL
in PHP 5.3. Der verwirrende Teil ist, dass der Name immer noch PDO_MYSQL
ist . ND ist jetzt also der Standardtreiber für MySQL+PDO.
Insgesamt benötigen Sie zum gleichzeitigen Ausführen mehrerer Abfragen:
- PHP 5.3+
- mysqlnd
- Emulierte vorbereitete Anweisungen. Stellen Sie sicher, dass
PDO::ATTR_EMULATE_PREPARES
auf1
gesetzt ist (Ursprünglich). Alternativ können Sie die Verwendung vorbereiteter Anweisungen vermeiden und$pdo->exec
verwenden direkt.
Exec verwenden
$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);
Anweisungen verwenden
$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();
Ein Hinweis:
Wenn Sie emulierte vorbereitete Anweisungen verwenden, stellen Sie sicher, dass Sie die richtige Codierung (die die tatsächliche Datencodierung widerspiegelt) in DSN (verfügbar seit 5.3.6). Andernfalls kann es eine geringfügige Möglichkeit für SQL-Injection geben, wenn eine seltsame Codierung verwendet wird .