Fehler: PDO-Fehler: SQLSTATE[HY000]: Allgemeiner Fehler: 2031
Dieser Fehler weist darauf hin, dass ein Problem mit den Parametern von vorliegt eine SQL-Abfrage. In diesem Fall scheint das Problem darin zu liegen, dass die bindValue()-Methode zum manuellen Hinzufügen von LIMIT-Platzhaltern zur Abfrage verwendet wird.
Der folgende Code verursacht den Fehler:
<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>
Der Fehler tritt auf, weil die Abfrage Platzhalter (:page und :entries_per_page) enthält, die mit bindValue() gebunden werden müssen, bevor die Abfrage ausgeführt werden kann. Bevor jedoch bindValue() zum Binden der LIMIT-Platzhalter verwendet wird, wandelt die Engine sie in Zeichenfolgen um. Um dieses Problem zu beheben, können Sie den folgenden Code verwenden:
<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>
Dieser Code ersetzt die Platzhalter in der Abfrage durch ihre Werte, bevor die Abfrage ausgeführt wird.
Vorsicht vor Duplikaten Parameternamen
Es ist wichtig zu beachten, dass der Fehler 2031 auch durch die Bindung zweier Werte an denselben Parameternamen verursacht werden kann. Zum Beispiel:
<code class="php">$sth->bindValue(':colour', 'blue'); $sth->bindValue(':colour', 'red');</code>
Die zweimalige Verwendung desselben Parameternamens führt zu einem Fehler. Daher ist es wichtig sicherzustellen, dass jeder Parametername eindeutig ist.
Das obige ist der detaillierte Inhalt vonWas kann den SQLSTATE[HY000] verursachen: Allgemeiner Fehler: 2031 im PDO?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!