バインド変数の不一致の謎
この質問は、広範な 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", ...);
追加の注意事項:
以上がMySQL のプリペアド ステートメントが「型定義文字列内の要素の数がバインド変数の数と一致しません」というエラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。