Maison >base de données >tutoriel mysql >Qu'est-ce qui peut provoquer l'erreur SQLSTATE[HY000] : générale : 2031 dans 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!