ホームページ  >  記事  >  データベース  >  MySQL のプリペアド ステートメントが「型定義文字列内の要素の数がバインド変数の数と一致しません」というエラーで失敗するのはなぜですか?

MySQL のプリペアド ステートメントが「型定義文字列内の要素の数がバインド変数の数と一致しません」というエラーで失敗するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-19 00:16:02653ブラウズ

Why Does My MySQL Prepared Statement Fail with a

バインド変数の不一致の謎

この質問は、広範な MySQL プリペアド ステートメントのパラメータをバインドするときに発生したエラーを中心に展開しています。問題は、bind_param メソッド内の「s」タイプ インジケーターの数とクエリ文字列内の疑問符 (?) の数の不一致にあります。

bind_param() について

bind_param() は、準備されたクエリ内の疑問符 (?) を実際のデータに置き換える mysqli メソッドです。型定義文字列の各文字 (文字列の「s」など) は、疑問符とバインドされるデータに対応します。

バインド変数の数の一致

覚えておくべき重要な点は、型定義文字列 (例: "s,s,s") の文字数がクエリ文字列内の疑問符 (?) の数と正確に一致する必要があるということです。たとえば、3 つの疑問符を含むクエリには、3 つの「s」文字を含む型定義文字列が必要です。

コードの検査

指定された PHP コードでは、クエリはstring には 65 個の疑問符が含まれていますが、bind_param() メソッドでは "s,s,s,s,s,s,s,s" (合計 8​​ 文字の "s" のみ) が使用されます。この不一致により、「型定義文字列の要素の数がバインド変数の数と一致しません。」というエラー メッセージが表示されます。

問題を解決するには:

問題を修正するには、bind_param() メソッド内の「s」文字の数がクエリ文字列内の疑問符 (?) の数と一致することを確認します。この場合、bind_param() メソッドは次のように置き換える必要があります。

$stmt->bind_param("sssssssssssssssssssssssssssssssssssssssssssssssssssssssssss", ...);

追加の注意事項:

  • 型定義文字列内の文字は使用できません。カンマで区切ります。
  • mysqli_stmt::bind_param() のマニュアル ページに記載されている形式に従う必要があります。

以上がMySQL のプリペアド ステートメントが「型定義文字列内の要素の数がバインド変数の数と一致しません」というエラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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