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 til1
(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 .