検索

ホームページ  >  に質問  >  本文

mysqliの問題にどう対処するか?たとえば、mysqli_fetch_array() でエラーが発生します。パラメータ #1 は mysqli_result 型である必要があります。

<p>私のローカル/開発環境では、MySQLi クエリは正常に実行されます。ただし、Web ホスティング環境にアップロードすると、次のエラーが表示されます: </p> <ブロック引用> <p>致命的なエラー:...</p> 内の非オブジェクトに対するメンバー関数 binding_param() の呼び出し </blockquote> <p>これはコードです: </p> <pre class="brush:php;toolbar:false;">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);</pre> <p>クエリを確認するために、コントロール パネルの phpMyAdmin からクエリを実行してみましたが、結果は正常でした。 </p>
P粉426906369P粉426906369498日前473

全員に返信(1)返信します

  • P粉252116587

    P粉2521165872023-07-25 15:41:15

    ###要するに###

    mysqli 接続コードでは常に mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) を使用し、常に PHP エラーをチェックしてください。
    1. SQL クエリ内のすべての PHP 変数を常に疑問符に置き換え、プリペアド ステートメントを使用してクエリを実行します。これは、さまざまな構文エラーを回避するのに役立ちます。
    2. ###説明する###
    3. mysqli コードでは、mysqli_fetch_assoc() でパラメーター 1 が mysqli_result であることを予期しているのに、実際にはブール値を取得している...、bind_param() のメンバー関数を呼び出している... などのエラーが発生することがあります。エラーさえありませんが、クエリはまだ機能しません。これは、クエリの実行に失敗したことを意味します。

    クエリが失敗するたびに、MySQL には理由を説明するエラー メッセージが表示されます。古いバージョンの PHP では、これらのエラー メッセージは PHP に渡されず、上記のわかりにくいエラー メッセージが表示されるだけでした。したがって、MySQL エラーを報告するように PHP と mysqli を設定することが非常に重要です。エラー メッセージが表示されたら、エラーを修正できます。

    MySQL でエラー情報を取得する方法 まず、すべての環境で、常に mysqli 接続の前に次のコード行を追加します。 リーリー

    これ以降、すべての MySQL エラーは PHP 例外に変換されます。キャッチされない例外は、PHP の致命的なエラーの原因となります。したがって、MySQL エラーが発生すると、通常の PHP エラーが発生します。これにより、エラーの原因がすぐにわかります。また、スタック トレースにより、エラーが発生した正確な場所がわかります。

    PHPからエラー情報を取得する方法

    開発サーバーでは画面にエラーメッセージが表示されていることを確認し、本番サーバーではエラーログを確認してください。詳細については、PHP エラー報告に関する私の記事を参照してください。

    AJAX 呼び出しを行う場合は、開発サーバーで開発者ツール (F12) を開き、[ネットワーク] タブに切り替えることに注意してください。次に、結果を確認したいリクエストを行うと、結果が [ネットワーク] タブに表示されます。それをクリックして、[応答] タブに切り替えます。そこに正確な出力が表示されます。運用サーバーでエラー ログを確認します。

    表示されたエラー メッセージの処理方法

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

    エラー メッセージが表示されたら、それを読んで理解する必要があります。当たり前すぎるように聞こえるかもしれませんが、学習者は、エラー メッセージが単なる警告サインではなく、実際には問題の詳細な説明が含まれているという事実を見落としがちです。エラー メッセージを読んで問題を解決するだけです。

    テーブルが存在しないことを示すエラー メッセージが表示された場合は、スペル、タイプミス、大文字と小文字の区別をチェックする必要があります。また、PHP スクリプトが正しいデータベースに接続されていることを確認する必要があります。 エラー メッセージに SQL 構文エラーが示されている場合は、SQL ステートメントを確認する必要があります。問題は、エラー メッセージで参照されているクエリの部分の前にあるはずです。

    • エラー メッセージがわからない場合は、Google で検索してみてください。結果を参照するときは、解決策を直接与えるのではなく、エラーを説明する回答を選択してください。この解決策は特定の状況では機能しない可能性がありますが、説明は問題を理解し、自分で解決できるようにするのに役立ちます。
    • 誤った情報を信じることも必要です。エラー メッセージに、トークンの数がバインド変数の数と一致しないことが示されている場合は、それだけです。テーブルや列が欠落している場合も同様です。選択するときは、それが自分自身のせいであれ、誤った情報のせいであれ、常に前者に固執してください。繰り返しになりますが、これは傲慢に聞こえるかもしれませんが、このサイトの何百もの質問は、このアドバイスがどれほど役立つかを証明しています。

      基本的なデバッグ

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

      1. 実行中にエラーが発生しました。すでに上で説明しました。
      2. プログラム ロジック エラーのため、SQL はまったく実行されませんでした。一時的なデバッグ出力を追加して、コードがクエリが実行されるポイントに確実に到達するようにします。
      3. SQL は正常に実行されましたが、結果が間違ったデータベースで表示されました。もう一度ご確認ください。
      4. 入力されたデータはデータベースと一致しません。ぜひチェックしてみてください。
      5. #

      返事
      0
  • キャンセル返事