Maison  >  Article  >  base de données  >  Qu'est-ce qui peut provoquer l'erreur SQLSTATE[HY000] : générale : 2031 dans PDO ?

Qu'est-ce qui peut provoquer l'erreur SQLSTATE[HY000] : générale : 2031 dans PDO ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 17:02:02609parcourir

What Can Cause the SQLSTATE[HY000]: General error: 2031 in PDO?

Erreur : Erreur PDO : SQLSTATE[HY000] : Erreur générale : 2031

Cette erreur indique qu'il y a un problème avec les paramètres de une requête SQL. Dans ce cas, il semble que le problème provienne de la méthode bindValue() utilisée pour ajouter manuellement des espaces réservés LIMIT à la requête.

Le code suivant est à l'origine de l'erreur :

<code class="php">if ($limit) {
   $sth->bindValue(':page', $page - 1, PDO::PARAM_INT);
   $sth->bindValue(':entries_per_page', $page * $entries_per_page, PDO::PARAM_INT);
}</code>

L'erreur se produit car la requête contient des espaces réservés (:page et :entries_per_page) qui doivent être liés à l'aide de bindValue() avant que la requête puisse être exécutée. Cependant, avant d'utiliser bindValue() pour lier les espaces réservés LIMIT, le moteur les transforme en chaînes. Pour résoudre ce problème, vous pouvez utiliser le code suivant :

<code class="php">if ($limit) {
   $query = str_replace(':page', $page - 1, $query);
   $query = str_replace(':entries_per_page', $page * $entries_per_page, $query);
   $sth->execute($criteria);
}</code>

Ce code remplacera les espaces réservés dans la requête par leurs valeurs avant d'exécuter la requête.

Attention aux doublons Noms des paramètres

Il est important de noter que l'erreur 2031 peut également être provoquée par la liaison de deux valeurs au même nom de paramètre. Par exemple :

<code class="php">$sth->bindValue(':colour', 'blue');
$sth->bindValue(':colour', 'red');</code>

L’utilisation deux fois du même nom de paramètre entraînera l’erreur. Par conséquent, il est important de s'assurer que chaque nom de paramètre est unique.

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