mysqli_stmt::bind_result(): バインド変数とプリペアド ステートメント フィールドの不一致
質問:
を実行しようとすると、 mysqli_stmt でプリペアド ステートメントを実行すると、「mysqli_stmt::bind_result(): バインド変数の数がプリペアド ステートメントのフィールドの数と一致しません。」というエラーが発生します。このエラーが表示されるのはなぜですか?
コード例:
$mysqli = new mysqli("localhost", "root", "", "security"); $stmt = $mysqli->prepare("SELECT username AND password FROM users WHERE username = ?"); $username = $_POST['name']; $stmt->bind_param('s', $username); $stmt->execute(); $stmt->bind_result($password, $username); $stmt->fetch();
回答:
発生しているエラーこの問題は、bind_result() で指定された変数の数が、プリペアド ステートメント クエリによって返される列の数と一致しない場合に発生します。この例では、1 つの列のみを返すクエリに 2 つの変数をバインドしようとしています。
この問題を解決するには、クエリを操作に適した形式で記述する必要があります。複数のフィールドを選択するための適切な構文は、AND ではなくカンマで区切ることです。
$stmt = $mysqli->prepare("SELECT username, password FROM users WHERE username = ?");
クエリが修正されたら、bind_result() メソッドを使用して変数を結果に正しくバインドできます。
$stmt->bind_result($username, $password);
以上が「mysqli_stmt::bind_result()」が「バインド変数の不一致」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。