データベース操作にPHPを使用する場合、エラーが発生するのは一般的な現象の1つです。その中で、「mysqli_resultではないオブジェクトのメソッドを呼び出す」エラーは、通常、データベースクエリ結果処理に関連しています。このエラーの原因を分析し、それを解決する方法に関するアイデアを提供しましょう。
PHPでは、データベース操作にMySQLI拡張子を使用する場合、通常、クエリを実行し、 MySQLI_RESULTオブジェクトであるデータベースから結果セットを取得することが期待されます。このオブジェクトは、一連のメソッドを使用して、クエリの結果にアクセスできます。
たとえば、次のSQLクエリを実行します。
$sql = "SELECT * FROM users WHERE id = 1";
$result = $mysqli->query($sql);
$ result変数はmysqli_resultオブジェクトである必要があります。クエリが成功した場合、それを使用してクエリデータを取得できます。
$row = $result->fetch_assoc(); // データの行を取得します
ただし、場合によっては、 $ resultは型mysqli_resultではなく、他のオブジェクトまたは変数である場合があります。現時点では、「mysqli_resultではないオブジェクトのメソッドを呼び出す」などのエラーが報告されます。
このエラーの原因は通常、次のとおりです。
クエリの失敗: query()メソッドが実行に失敗した場合、 mysqli_resultオブジェクトの代わりにfalseを返します。この時点で、 $ resultでfetch_assoc()または他のメソッドを呼び出し続けると、タイプエラーが発生します。
例えば:
$result = $mysqli->query($sql);
if ($result === false) {
die("クエリに失敗しました: " . $mysqli->error);
}
このコードは、クエリが失敗したときにmysqli_resultのメソッドが呼び出され続けないようにするため、タイプエラーを回避します。
接続エラー:データベース接続が失敗した場合、 $ mysqliオブジェクト自体が正しく機能しません。データベース接続が成功していることを確認してください。
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
データベース接続が成功しない場合、後続のクエリは実行されないため、 $ resultはmysqli_resultのタイプではありません。
呼び出しエラー:論理的な問題のために、プログラムは誤った場所でfetch_assoc()などのメソッドを呼び出す場合があり、結果として$ resultがクエリ結果オブジェクトではなくなります。
この問題を解決するとき、デバッグコードを追加して$ resultのタイプを確認して、それがmysqli_resultオブジェクトであることを確認できます。
var_dump($result);
このタイプのエラーを回避するには、クエリ操作後に$ resultが有効なmysqli_resultオブジェクトであるかどうかを確認してください。これが改善されたコードの例です。
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
// 接続が成功しているかどうかを確認してください
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM users WHERE id = 1";
$result = $mysqli->query($sql);
// クエリが成功したかどうかを確認してください
if ($result === false) {
die("クエリに失敗しました: " . $mysqli->error);
}
// プロセスクエリの結果
while ($row = $result->fetch_assoc()) {
echo "ユーザーID: " . $row['id'] . " ユーザー名: " . $row['name'] . "<br>";
}
?>
Query()メソッドの返品値をチェックすることにより、タイプエラーを回避できるように、有効なmysqli_resultオブジェクトを返すことを確認します。
PHPでMySQLI拡張機能を使用する場合、クエリ障害またはオブジェクトタイプの呼び出しが誤っている場合にエラーが発生することがよくあります。結果セットが各クエリの後に有効であることを確認し、間違ったオブジェクトの呼び出しメソッドを回避することが、このタイプのエラーを解く鍵です。