sql >> Database teknologi >  >> RDS >> Mysql

PDO-understøttelse af flere forespørgsler (PDO_MYSQL, PDO_MYSQLND)

Som jeg ved, PDO_MYSQLND erstattet PDO_MYSQL i PHP 5.3. Forvirrende del er, at navnet stadig er PDO_MYSQL . Så nu er ND standarddriver for MySQL+PDO.

For at udføre flere forespørgsler på én gang har du generelt brug for:

  • PHP 5.3+
  • mysqlnd
  • Emulerede forberedte udsagn. Sørg for at PDO::ATTR_EMULATE_PREPARES er indstillet til 1 (Standard). Alternativt kan du undgå at bruge forberedte sætninger og bruge $pdo->exec direkte.

Brug af 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);

Brug af udsagn

$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 bemærkning:

Når du bruger emulerede forberedte sætninger, skal du sørge for, at du har indstillet korrekt kodning (der afspejler faktisk datakodning) i DSN (tilgængelig siden 5.3.6). Ellers kan der være en lille mulighed for SQL-injektion, hvis der bruges en underlig kodning .



  1. Tilfældig værdi for kolonnen DATETIME

  2. Indstilling af skema i PostgreSQL JDBC ser ikke ud til at virke

  3. PostgreSQL-kolonnen 'foo' eksisterer ikke

  4. MySQL:Sorter GROUP_CONCAT-værdier