mysqli の問題にどう対処すればよいですか? mysqli_fetch_array() のようなエラー: 引数 #1 は mysqli_result 型である必要があります などの質問する

mysqli の問題にどう対処すればよいですか? mysqli_fetch_array() のようなエラー: 引数 #1 は mysqli_result 型である必要があります などの質問する

ローカル/開発環境では、MySQLi クエリは正常に実行されています。ただし、Web ホスト環境にアップロードすると、次のエラーが発生します。

致命的なエラー: 非オブジェクトに対するメンバー関数 bind_param() の呼び出し...

コードは次のとおりです:

global $mysqli;
$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");
$stmt->bind_param('i', $cur_id);
$stmt->execute();
$stmt->bind_result($uid, $desc);

クエリを確認するために、コントロールパネルからクエリを実行しようとしましたphpMyAdmin結果はOKです。

ベストアンサー1

要約

  1. 常にmysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);mysqli接続コードに常にPHPエラーをチェックする
  2. SQLクエリ内のPHP変数を常に疑問符に置き換え、次のようにクエリを実行します。準備されたステートメントあらゆる種類の構文エラーを回避するのに役立ちます。

説明

場合によっては、mysqli コードで などのエラーが発生することがありますmysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given...Call to a member function bind_param()...または、エラーが発生しなくても、クエリがまったく同じように機能しないことがあります。これは、クエリの実行に失敗したことを意味します。

クエリが失敗するたびに、MySQLは理由を説明するエラーメッセージ以前のバージョンの PHP では、このようなエラーは PHP に転送されず、上記のような不可解なエラー メッセージしか表示されませんでした。そのため、MySQL エラーを報告するように PHP と mysqli を設定することが非常に重要です。エラー メッセージが表示されたら、エラーを修正できます。

mysqliでエラーメッセージを取得する方法

まず、mysqli接続の前に必ずこの行を入れてください全てあなたの環境:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

その後、すべての MySQL エラーは PHP 例外に転送されます。キャッチされない例外は、PHP の致命的なエラーになります。したがって、MySQL エラーの場合は、従来の PHP エラーが発生します。これにより、エラーの原因がすぐにわかります。また、スタック トレースにより、エラーが発生した正確な場所がわかります。

PHPからエラーメッセージを取得する方法

開発サーバーではエラーが画面に表示されていることを確認し、ライブサーバーではエラーログを確認してください。PHP エラー報告詳細については。

AJAX 呼び出しの場合、開発サーバーで DevTools (F12) を開き、ネットワーク タブを開きます。次に、結果を確認したいリクエストを開始すると、ネットワーク タブに表示されます。それをクリックし、次に応答タブをクリックします。そこで正確な出力が表示されます。ライブ サーバーでエラー ログを確認します。

表示されたエラーメッセージに対する対処方法

まず、問題のあるクエリを見つける必要があります。エラーメッセージには、ファイル名と行番号エラーが発生した正確な場所。単純なコードであればこれで十分ですが、関数やクラスを使用しているコードの場合は、スタックトレース問題のあるクエリを見つけます。

エラーメッセージが表示されたら、それを読んで理解する必要があります。これはあまりにも明白で、見下しているように聞こえますが、学習者はエラーメッセージが単なる警告信号ではなく、実際には問題の詳細な説明必要なのは、エラー メッセージを読んで問題を修正することだけです。

  • たとえば、特定のテーブルが存在しないと表示されたら、スペル、タイプミス、大文字と小文字をチェックする必要があります。また、PHPスクリプトが正しいデータベースに接続していることを確認する必要があります。
  • または、SQL構文にエラーがあると表示されたら、SQLを調べる必要があります。そして、問題箇所は前にエラー メッセージに引用されているクエリ部分。

エラーメッセージが理解できない場合は、Googleで検索してみてください。そして、結果を閲覧するときは、説明する解決策を単刀直入に提示するのではなく、エラーについて詳しく説明してください。解決策は特定のケースでは機能しないかもしれませんが、説明は問題を理解し、自分で問題を解決できるようにするのに役立ちます。

あなたも信頼エラーメッセージ。トークンの数がバインドされた変数の数と一致しないと表示された場合は、そう。テーブルや列がない場合も同様です。選択肢がある場合、自分のミスかエラー メッセージが間違っているかにかかわらず、常に前者を選択してください。またしても見下したように聞こえますが、このサイトの何百もの質問がこのアドバイスが非常に役立つことを証明しています。

基本的なデバッグ

クエリが機能していないように見える場合は、次の 4 つの理由が考えられます。

  1. 実行中にエラーが発生しました。上記で既に説明しました。
  2. プログラム ロジックが正しくないため、SQL はまったく実行されませんでした。一時的なデバッグ出力を追加して、コードがクエリの実行ポイントに到達したことを確認します。
  3. SQLは正常に実行されましたが、結果は間違ったデータベースもう一度確認してください
  4. 入力データがデータベースと一致しません。こちらにいくつかの推奨事項があります。確認方法

おすすめ記事