いつでも...
「警告:mysqli_fetch_object()はパラメーター1がmysqli_resultであると想定しています。ブール値が指定されています」
...クエリに問題がある可能性があります。prepare()
またはquery()
返されることがありますFALSE
(ブール値)が、この一般的なエラーメッセージは、多くの手がかりの方法であなたを残していません。クエリのどこが悪いのかをどのようにして見つけますか?あなたが尋ねる!
まず、エラー報告がオンになっていて表示されていることを確認します。これらの2行を、ファイルを開いた直後にファイルの先頭に追加します <?php
タグの。
error_reporting(E_ALL);
ini_set('display_errors', 1);
エラー報告がphp.iniで設定されている場合、これについて心配する必要はありません。エラーを適切に処理し、問題の真の原因をユーザーに明らかにしないようにしてください。本当の原因を公に明らかにすることは、あなたのサイトやサーバーに危害を加えたいと思っている人にとって、金の彫刻が施された招待状になる可能性があります。ブラウザにエラーを送信したくない場合は、いつでもWebサーバーのエラーログを監視できます。ログの場所はサーバーによって異なります。たとえば、Ubuntuではエラーログは通常次の場所にあります/var/log/apache2/error.log
ます。Linux環境でエラーログを調査している場合tail -f /path/to/log
は、コンソールウィンドウで使用して、リアルタイムで発生したエラーを確認したり、エラーを確認したりできます。
標準エラーレポートに慣れてきたら、データベース接続とクエリにエラーチェックを追加すると、進行中の問題についてより詳細な情報が得られます。列名が正しくないこの例を見てください。まず、一般的な致命的なエラーメッセージを返すコード:
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
エラーは一般的なものであり、何が起こっているのかを解決するうえであまり役に立ちません。
さらに数行のコードを使用すると、問題をすぐに解決するために使用できる非常に詳細な情報を取得できます。prepare()
ステートメントが真実かどうかを確認し、正しければバインドと実行に進むことができます。
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
// any additional code you need would go here.
} else {
$error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
// handle error
}
何か問題がある場合は、問題に直接移動するエラーメッセージを出力できます。この場合、foo
表には列がありません。問題を解決するのは簡単です。
必要に応じて、このチェックを関数またはクラスに組み込み、前述のようにエラーを適切に処理することで拡張できます。