sql >> Databáze >  >> RDS >> Mysql

Podpora PDO pro více dotazů (PDO_MYSQL, PDO_MYSQLND)

Jak vím, PDO_MYSQLND nahradil PDO_MYSQL v PHP 5.3. Matoucí je, že název je stále PDO_MYSQL . Nyní je tedy ND výchozím ovladačem pro MySQL+PDO.

K provedení více dotazů najednou potřebujete:

  • PHP 5.3+
  • mysqlnd
  • Emulované připravené příkazy. Ujistěte se, že PDO::ATTR_EMULATE_PREPARES je nastaven na 1 (výchozí). Případně se můžete vyhnout použití připravených příkazů a použít $pdo->exec přímo.

Pomocí 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);

Použití příkazů

$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();

Poznámka:

Při použití emulovaných připravených příkazů se ujistěte, že jste nastavili správné kódování (které odráží skutečné kódování dat) v DSN (k dispozici od 5.3.6). Jinak může existovat malá možnost vložení SQL, pokud se použije nějaké liché kódování .



  1. Jak rychle odstranit uživatele se stávajícími oprávněními

  2. Kde jsou protokoly PostgreSQL na macOS?

  3. Sledování latence čtení/zápisu

  4. Flexibilní a ovladatelné návrhy kusovníků (BOM).