Maison >développement back-end >tutoriel php >Comment puis-je exécuter plusieurs requêtes avec PDO en PHP ?

Comment puis-je exécuter plusieurs requêtes avec PDO en PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 16:27:10226parcourir

How Can I Execute Multiple Queries with PDO in PHP?

Prise en charge de PDO pour plusieurs requêtes : PDO_MYSQL et PDO_MYSQLND

Le PDO traditionnel ne prend pas en charge nativement l'exécution de plusieurs requêtes dans une seule instruction. Cependant, PDO_MYSQL et PDO_MYSQLND ont été développés pour résoudre cette limitation.

PDO_MYSQL et PDO_MYSQLND

PDO_MYSQL est désormais considéré comme obsolète. En fait, depuis PHP 5.3, MySQL PDO utilise le pilote PDO_MYSQLND par défaut.

Exécuter plusieurs requêtes avec PDO

Pour exécuter plusieurs requêtes avec PDO, vous avez besoin ce qui suit :

  • PHP 5.3
  • Pilote PDO_MYSQLND (disponible comme pilote MySQL par défaut)
  • Instructions préparées émulées (PDO::ATTR_EMULATE_PREPARES défini sur 1)

Utilisation d'exec

Pour les requêtes SQL avec des valeurs constantes, la méthode exec() peut être utilisé :

$db->exec("
    DELETE FROM car;
    INSERT INTO car(name, type) VALUES ('car1', 'coupe');
    INSERT INTO car(name, type) VALUES ('car2', 'coupe');
");

Utilisation d'instructions préparées

Pour les requêtes avec des données de variables PHP, des instructions préparées sont nécessaires :

$stmt = $db->prepare("
    DELETE FROM car;
    INSERT INTO car(name, type) VALUES (:car1, :type1);
    INSERT INTO car(name, type) VALUES (:car2, :type2);
");

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

while ($stmt->nextRowset()) {
    echo $db->lastInsertId();
}

Remarque que dans les deux cas, il est essentiel de définir PDO::ATTR_EMULATE_PREPARES à 1 lors de l'utilisation de plusieurs requêtes.

Remarque sur le codage

Lorsque vous utilisez des instructions préparées émulées, assurez-vous de spécifier le codage correct 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!

Déclaration:
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