ホームページ >バックエンド開発 >PHPチュートリアル >MySQLi のプリペアド ステートメントで「バインド変数の数がフィールドの数と一致しません」エラーがスローされるのはなぜですか?
MySQLi プリペアド ステートメントの不一致のバインド変数
PHP でプリペアド ステートメントを使用してログイン フォームを実装しようとすると、一部の開発者はイライラする問題に遭遇します。エラー: "mysqli_stmt::bind_result(): バインド変数の数準備されたステートメントのフィールドの数と一致しません。
このエラーは、SQL クエリと binding_result() 関数に、選択されて変数に割り当てられているフィールドの数が一致しない場合に発生します。提供されたコードに基づいてこの問題に対処する方法を調べてみましょう。
提供されたコード内:
$stmt = $mysqli->prepare("SELECT username AND password FROM users WHERE username = ?"); $stmt->bind_param('s', $username); $stmt->execute(); $stmt->bind_result($password, $username);
問題は SQL クエリにあります。複数のフィールドを選択する場合は、カンマの代わりに「AND」キーワードが使用されます。複数のフィールドを選択するための正しい構文は、フィールドをカンマで区切ることです。
$stmt = $mysqli->prepare("SELECT username, password FROM users WHERE username = ?");
さらに、bind_result() 関数は、選択したフィールドの数と一致する必要があります。この場合、2 つのフィールドが選択されているため、bind_result() 関数には 2 つの変数が必要です:
$stmt->bind_result($username, $password);
選択構文を修正し、bind_result() 関数を選択されたフィールドの数に合わせることで、問題は解決されます。不一致のバインド変数が解決され、ログイン フォームが正しく機能できるようになります。
以上がMySQLi のプリペアド ステートメントで「バインド変数の数がフィールドの数と一致しません」エラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。