Maison >développement back-end >tutoriel php >Comment puis-je exécuter plusieurs requêtes dans une seule instruction PDO avec PDO_MYSQL et PDO_MYSQLND ?
Bien que PDO n'autorise généralement pas plusieurs requêtes dans une seule instruction, les extensions PDO_MYSQL et PDO_MYSQLND fournissent une prise en charge pour cela. fonctionnalité.
PDO_MYSQLND a depuis remplacé PDO_MYSQL dans PHP 5.3, PDO_MYSQL restant comme pilote par défaut pour MySQL PDO. Pour exécuter plusieurs requêtes avec PDO, les conditions suivantes doivent être remplies :
La méthode exec() peut exécuter plusieurs requêtes lorsque :
$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'root', ''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $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);
Cette méthode est limitée à l'exécution d'instructions SQL avec valeurs constantes.
Lorsque les données proviennent de variables PHP, les instructions préparées doivent être utilisé :
$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"]); while ($stmt->nextRowset()) { echo $db->lastInsertId(); // as an example }
Cette approche permet la vérification des erreurs et la collecte des résultats de requête par itération sur des ensembles de lignes.
Lors de l'utilisation d'instructions préparées émulées , assurez-vous que l'encodage dans le DSN (disponible depuis PHP 5.3.6) correspond à l'encodage réel des données. Sinon, il peut y avoir un potentiel d'injection SQL avec certains encodages.
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!