Que je sache, PDO_MYSQLND
remplacé PDO_MYSQL
en PHP 5.3. Déroutant, c'est que le nom est encore PDO_MYSQL
. Alors maintenant, ND est pilote par défaut pour MySQL+AOP.
Dans l'ensemble, afin d'exécuter plusieurs requêtes à la fois, vous devez:
- PHP 5.3+
- mysqlnd
- Des émules déclarations préparées à l'avance. Assurez -
PDO::ATTR_EMULATE_PREPARES
est définie à l' 1
(par défaut). Sinon, vous pouvez éviter d'utiliser des requêtes préparées et utiliser $pdo->exec
directement.
En utilisant 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');
";
try {
$db->exec($sql);
}
catch (PDOException $e)
{
echo $e->getMessage();
die();
}
À l'aide de relevés
$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');
";
try {
$stmt = $db->prepare($sql);
$stmt->execute();
}
catch (PDOException $e)
{
echo $e->getMessage();
die();
}
Une remarque:
Lors de l'utilisation des émules déclarations préparées à l'avance, assurez-vous de régler correctement l'encodage (qui reflète les données réelles de l'encodage) dans DSN (disponible depuis 5.3.6). Sinon, il peut y avoir une légère possibilité pour l'injection SQL si certains impairs encodage utilisé.