ホームページ > バックエンド開発 > PHPチュートリアル > MySQLi のプリペアド ステートメントで「バインド変数の数がフィールドの数と一致しません」エラーがスローされるのはなぜですか?

MySQLi のプリペアド ステートメントで「バインド変数の数がフィールドの数と一致しません」エラーがスローされるのはなぜですか?

Patricia Arquette
リリース: 2024-12-15 21:30:26
オリジナル
239 人が閲覧しました

Why Does My MySQLi Prepared Statement Throw a

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート