L'erreur MySQL 2014 se produit lorsque vous essayez d'exécuter une requête alors qu'une autre requête sans tampon est toujours actif. Cela peut se produire lors de l'utilisation d'instructions préparées avec PDO::ATTR_EMULATE_PREPARES défini sur false.
Lorsque PDO::ATTR_EMULATE_PREPARES est vrai, PDO émulera les instructions préparées en les convertissant en requêtes SQL normales. Cela signifie que le serveur exécutera la requête une fois pour chaque ligne de données, permettant aux requêtes sans tampon d'être exécutées simultanément.
Cependant, lorsque PDO::ATTR_EMULATE_PREPARES est faux, PDO enverra l'instruction préparée au serveur. et maintenez le curseur ouvert. Cela empêche l'exécution d'autres requêtes jusqu'à la fermeture du curseur.
Il existe plusieurs solutions à cette erreur :
Dans l'extrait de code fourni, il existe un problème où la requête $stmt2 est exécutée plusieurs fois dans la boucle. Ceci est inutile et peut être déplacé en dehors de la boucle pour améliorer les performances.
Il est également recommandé d'utiliser des paramètres nommés (PDO::bindParam()) au lieu de paramètres de position (PDO::execute() avec un tableau) pour les déclarations préparées. Cela rend le code plus lisible et réduit le risque d'injection SQL.
L'erreur MySQL 2014 peut être causée par une mauvaise gestion des requêtes sans tampon. En utilisant des requêtes mises en mémoire tampon, en appelant fetchAll() ou en fermant le curseur, cette erreur peut être évitée.
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!