ホームページ  >  記事  >  バックエンド開発  >  データベースの結果にアクセスすると「非オブジェクトのプロパティを取得しようとしています」というエラーが表示されるのはなぜですか?

データベースの結果にアクセスすると「非オブジェクトのプロパティを取得しようとしています」というエラーが表示されるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-08 01:13:03315ブラウズ

Why am I getting the

非オブジェクトのプロパティにアクセスしようとしています

データベースからデータを取得しようとすると、「プロパティを取得しようとしています」というエラーが発生します非オブジェクトの。」このエラーは、null または存在しないオブジェクトのプロパティにアクセスしようとすると発生します。

特定のシナリオでは、コントロール ページに次のコードがあります。

$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con);
$sidemenus = mysql_fetch_object($results);

そしてView ページ:

foreach ($sidemenus as $sidemenu): 
  echo $sidemenu->mname."<br />";
endforeach; 

mysql_fetch_object() がオブジェクトの配列ではなくオブジェクトを返すためにエラーが発生します。したがって、[表示] ページで反復不可能なオブジェクトを反復しようとすると、エラーが発生します。

解決策:

この問題を解決するには、次のようにします。

  • 結果を配列に変換します:
$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con);

$sidemenus = array();
while ($sidemenu = mysql_fetch_object($results)) {
    $sidemenus[] = $sidemenu;
}

これにより、結果がオブジェクトの配列に変換されます。

  • PDO を使用する:

PDO は、データベースと対話するためのより現代的で効率的な方法を提供します。 PDOStatement::fetchAll(PDO::FETCH_OBJ) は、mysql_fetch_object() から予期していた機能と同様に、オブジェクトの配列を返します。

$stmt = $con->prepare("SELECT * FROM sidemenu WHERE `menu_id` = :menu_id ORDER BY `id` ASC LIMIT 1");
$stmt->bindParam(':menu_id', $menu);
$stmt->execute();

$sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ);

これらのソリューションのいずれかを利用することで、以下からデータを取得できます。データベースを削除し、「非オブジェクトのプロパティを取得しようとしています。」というエラーを回避します。

以上がデータベースの結果にアクセスすると「非オブジェクトのプロパティを取得しようとしています」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。