ホームページ >データベース >mysql チュートリアル >PDO で SQLSTATE[HY000]: 一般エラー: 2031 が発生する原因は何ですか?
エラー: PDO エラー: SQLSTATE[HY000]: 一般エラー: 2031
このエラーは、パラメータに問題があることを示します。 SQL クエリ。この場合、クエリに LIMIT プレースホルダを手動で追加するために使用されているbindValue() メソッドに問題があるようです。
次のコードがエラーの原因です:
<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>
このエラーは、クエリを実行する前に、bindValue() を使用してバインドする必要があるプレースホルダ (:page および :entries_per_page) がクエリに含まれているために発生します。ただし、bindValue() を使用して LIMIT プレースホルダーをバインドする前に、エンジンはプレースホルダーを文字列に変換します。この問題を解決するには、次のコードを使用できます。
<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>
このコードは、クエリを実行する前にクエリ内のプレースホルダーをその値に置き換えます。
重複に注意してくださいパラメータ名
エラー 2031 は、2 つの値を同じパラメータ名にバインドすることによっても発生する可能性があることに注意することが重要です。例:
<code class="php">$sth->bindValue(':colour', 'blue'); $sth->bindValue(':colour', 'red');</code>
同じパラメータ名を 2 回使用すると、エラーが発生します。したがって、各パラメータ名が一意であることを確認することが重要です。
以上がPDO で SQLSTATE[HY000]: 一般エラー: 2031 が発生する原因は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。