Mysql
 sql >> Base de données >  >> RDS >> Mysql

Prise en charge de PDO pour plusieurs requêtes (PDO_MYSQL, PDO_MYSQLND)

Comme je le sais, PDO_MYSQLND remplacé PDO_MYSQL en PHP 5.3. La partie déroutante est que le nom est toujours PDO_MYSQL . Alors maintenant, ND est le pilote par défaut pour MySQL+PDO.

Dans l'ensemble, pour exécuter plusieurs requêtes à la fois, vous avez besoin :

  • PHP 5.3+
  • mysqlnd
  • Instructions préparées émulées. Assurez-vous que PDO::ATTR_EMULATE_PREPARES est défini sur 1 (défaut). Sinon, vous pouvez éviter d'utiliser des instructions préparées et utiliser $pdo->exec directement.

Utiliser 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);

Utiliser des instructions

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

Remarque :

Lorsque vous utilisez des instructions préparées émulées, assurez-vous d'avoir défini le codage approprié (qui reflète le codage réel des données) dans DSN (disponible depuis 5.3.6). Sinon il peut y avoir une légère possibilité d'injection SQL si un encodage étrange est utilisé .