mysqli_stmt::bind_result() エラー: バインド変数とプリペアド ステートメント フィールドの一致
ログイン メカニズムにプリペアド ステートメントを利用しようとしたときPHP では、次のエラーが発生する場合があります。 「mysqli_stmt::bind_result(): バインド変数の数が準備されたステートメントのフィールドの数と一致しません。」これは、結果でバインドしている変数の数と準備されたステートメントで予期されるフィールドの数との間に不一致があることを示しています。
間違ったコードと分析:
提供されたコードは問題を示しています:
$stmt = $mysqli->prepare("SELECT username AND password FROM users WHERE username = ?"); $stmt->bind_param('s', $username); $stmt->execute(); $stmt->bind_result($password, $username);
「AND」キーワードが正しく使用されていないためにエラーが発生します。 SELECT 句。フィールドを「AND」で区切る代わりに、カンマを使用する必要があります。
正しいコードと説明:
このエラーを解決するには、SELECT 句を次のように変更します。 :
$stmt = $mysqli->prepare("SELECT username, password FROM users WHERE username = ?");
この変更により、準備されたステートメントはユーザー名とパスワードの 2 つのフィールドが返されることを期待するようになりました。その後、mysqli_stmt::bind_result() を使用して 2 つの変数をそれらに安全にバインドできます。
$stmt->bind_result($username, $password);
バインド変数の数が準備されたステートメント内のフィールドの数と一致することを確認することで、「数値」バインド変数の数が準備されたステートメントのフィールドの数と一致しません」エラー。
以上が「mysqli_stmt::bind_result()」が「バインド変数の数がフィールドの数と一致しません」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。