ホームページ >データベース >mysql チュートリアル >PDO パラメータ バインド エラー: \'SQLSTATE[HY000]: 一般エラー: 2031\' を解決する方法

PDO パラメータ バインド エラー: \'SQLSTATE[HY000]: 一般エラー: 2031\' を解決する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-10-25 00:57:02245ブラウズ

How to Resolve PDO Parameter Binding Error:

PDO パラメーター バインディング エラー: SQLSTATE[HY000]: 一般エラー 2031

PHP の PDO ライブラリを利用すると、イライラするエラーが発生することがあります。 PDO エラー: SQLSTATE[HY000]: 一般エラー: 2031。」このエラーは、パラメータ バインディングに関する問題を示しています。

このエラーの考えられる原因の 1 つは、複数の値を 1 つのパラメータ名にバインドしていることです。次の例を考えてみましょう。

<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() メソッドを使用して 2 つの値を ':page' パラメータに手動でバインドします。 LIMIT 句でプレースホルダー (:placeholder) を直接使用しようとすると、PDO エンジンがプレースホルダー (:placeholder) を文字列に変換するため、これが必要です。

ただし、複数の値を同じパラメーター名にバインドするのは間違っており、次のような結果になります。 「SQLSTATE[HY000]: 一般エラー: 2031」エラー。

解決策:

このエラーを解決するには、各パラメーター名がバインドに 1 回だけ使用されるようにしてください。 。この例では、「:page」値と「:entries_per_page」値に個別のパラメータを宣言する必要があります。例:

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

注意:

バインドした場合にもエラー「SQLSTATE[HY000]: 一般エラー: 2031」が発生する可能性があることに注意することが重要です。 LIMIT 句と無関係であっても、コード内の他の場所で同じパラメータ名に複数の値を指定します。したがって、パラメーター バインディングを常に再確認して、各名前が 1 回だけ使用されていることを確認してください。

以上がPDO パラメータ バインド エラー: \'SQLSTATE[HY000]: 一般エラー: 2031\' を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。