INSERT クエリで問題が発生する: 準備されたステートメントと互換性のないバインド変数の数
PHP コードでは、次のステートメント間の不一致を示すエラー メッセージが表示されます。準備されたステートメント内のバインド変数とフィールドの数。具体的には、警告は次のようになります。
「警告: mysqli_stmt::bind_result(): バインド変数の数が準備されたステートメントのフィールドの数と一致しません。」
このエラーは次のコードで発生します。 :
if($stmt = $conn -> prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) { /* Bind parameters s - string, b - blob, i - int, etc */ $stmt -> bind_param("ss", $user, $pw); /* Execute it */ $stmt -> execute(); /* Bind results */ $stmt -> bind_result($user, $pw); /* Close statement */ $stmt -> close(); $userId = $conn->insert_id; }
問題の理解
このエラーは、何も返さないステートメントに結果変数 ($user および $pw) をバインドしようとしたことが原因で発生します。結果。この場合、INSERT クエリには SELECT 句や値を返すストアド プロシージャがありません。したがって、結果変数をバインドする必要はありません。
問題の解決
問題を解決するには、結果変数をバインドする行を削除するだけです:
$stmt -> bind_result($user, $pw);
この行を削除すると、バインド変数の数 (0) と準備されたステートメント内のフィールドの数 (これも 0) の不一致が解消されます。これによりエラーが解決され、コードが正常に実行できるようになります。
以上がINSERT クエリで「バインド変数の数がフィールドの数と一致しません」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。