ホームページ > データベース > mysql チュートリアル > PDO で SQLSTATE[HY000]: 一般エラー: 2031 が発生する原因は何ですか?

PDO で SQLSTATE[HY000]: 一般エラー: 2031 が発生する原因は何ですか?

Susan Sarandon
リリース: 2024-10-24 17:02:02
オリジナル
787 人が閲覧しました

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

エラー: 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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート