Maison  >  Article  >  développement back-end  >  Pourquoi l'erreur MySQL 2014 se produit-elle lors de l'exécution de requêtes simultanément avec PDO ?

Pourquoi l'erreur MySQL 2014 se produit-elle lors de l'exécution de requêtes simultanément avec PDO ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-19 01:23:021033parcourir

Why Does MySQL Error 2014 Occur When Executing Queries Concurrently with PDO?

Causes de l'erreur MySQL 2014 : impossible d'exécuter des requêtes alors que d'autres requêtes sans tampon sont actives

Introduction

Cette erreur se produit lors de la tentative d'exécution simultanée de plusieurs requêtes lors de l'utilisation de PDO avec PDO::ATTR_EMULATE_PREPARES défini sur false. Cela indique que le serveur MySQL ne peut pas gérer l'exécution de requêtes supplémentaires tant que toutes les requêtes sans tampon précédentes n'ont pas été récupérées.

Raison de l'erreur

Le comportement par défaut de PDO est d'émuler les instructions préparées en les traduisant en requêtes sans tampon. . Les requêtes sans tampon sont exécutées immédiatement et les résultats ne sont pas stockés côté client. Cela permet une gestion efficace de la mémoire des grands ensembles de résultats.

Cependant, lorsqu'il fonctionne dans ce mode, MySQL impose une restriction qui empêche l'exécution de requêtes ultérieures alors qu'une requête sans tampon est toujours en cours. C'est de là que provient l'erreur 2014.

Résolution

Il existe plusieurs approches pour résoudre cette erreur :

  1. Activer les requêtes tamponnées : Vous peut définir PDO::MYSQL_ATTR_USE_BUFFERED_QUERY sur true dans les paramètres de connexion de l'objet PDO. Cela demande à PDO d'utiliser des requêtes mises en mémoire tampon, qui stockent les résultats côté client et permettent l'exécution simultanée de requêtes.
  2. Utilisez fetchAll() ou closeCursor() : Après chaque exécution de requête sans tampon, vous pouvez utiliser PDOStatement::fetchAll() pour récupérer tous les résultats en une seule fois. Alternativement, appeler closeCursor() libère les ressources du serveur associées à la requête sans tampon, permettant ainsi l'exécution des requêtes suivantes.
  3. Passer à mysqlnd : La bibliothèque mysqlnd fournit un pilote plus avancé et plus efficace pour MySQL . Il prend en charge les requêtes sans tampon et avec tampon et gère plus efficacement l'exécution simultanée des requêtes.

Meilleures pratiques recommandées

Pour des performances et une efficacité optimales, il est recommandé d'utiliser des requêtes en tampon lors de la gestion de grands ensembles de résultats. ou lorsque la concurrence est critique. FetchAll() ou closeCursor() doivent être utilisés après chaque exécution de requête sans tampon pour libérer les ressources du serveur. De plus, l'utilisation de mysqlnd est fortement encouragée pour améliorer la connectivité et les performances de MySQL.

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