Maison > développement back-end > tutoriel php > PDO_MYSQL et PDO_MYSQLND peuvent-ils exécuter plusieurs requêtes SQL en une seule instruction ?

PDO_MYSQL et PDO_MYSQLND peuvent-ils exécuter plusieurs requêtes SQL en une seule instruction ?

Linda Hamilton
Libérer: 2024-12-23 13:22:54
original
1030 Les gens l'ont consulté

Can PDO_MYSQL and PDO_MYSQLND Execute Multiple SQL Queries in One Statement?

Support PDO pour plusieurs requêtes (PDO_MYSQL, PDO_MYSQLND)

Malgré la perception selon laquelle PDO ne prend pas en charge plusieurs requêtes dans une seule instruction, PDO_MYSQL et PDO_MYSQLND fournissent cette fonctionnalité.

PDO_MYSQL et PDO_MYSQLND

PDO_MYSQL a été remplacé par PDO_MYSQLND dans PHP 5.3. De manière déroutante, le nom reste PDO_MYSQL, mais PDO_MYSQLND est le pilote par défaut pour MySQL PDO.

Comment exécuter plusieurs requêtes

Pour exécuter plusieurs requêtes simultanément, les conditions suivantes doivent être remplies :

  • PHP 5.3 ou version ultérieure
  • mysqlnd extension
  • Instructions préparées émulées (PDO::ATTR_EMULATE_PREPARES défini sur 1, qui est la valeur par défaut pour MySQL)

Méthodes d'exécution de plusieurs requêtes

Utilisation exec :

$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "DELETE FROM car; 
INSERT INTO car(name, type) VALUES ('car1', 'coupe'); 
INSERT INTO car(name, type) VALUES ('car2', 'coupe');";

$db->exec($sql);
Copier après la connexion

Utilisation des instructions :

$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "DELETE FROM car; 
INSERT INTO car(name, type) VALUES (:car1, :type1); 
INSERT INTO car(name, type) VALUES (:car2, :type2);";

$stmt = $db->prepare($sql);
$stmt->execute(["car1" => "brand1", "type1" => "coupe", "car2" => "brand2", "type2" => "coupe"]);

// Check for errors and collect query results
do {
    echo $pdo->lastInsertId(); // for example
} while ($stmt->nextRowset());
Copier après la connexion

Remarque : Lorsque vous utilisez des instructions préparées émulées, définissez l'encodage approprié dans le DSN pour éviter les vulnérabilités potentielles d'injection SQL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal