Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PDO-Unterstützung für mehrere Abfragen (PDO_MYSQL, PDO_MYSQLND)

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 auf 1 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 .