ホームページ >データベース >mysql チュートリアル >PHP コードで「非オブジェクトのプロパティを取得しようとしています」エラーが発生するのはなぜですか?

PHP コードで「非オブジェクトのプロパティを取得しようとしています」エラーが発生するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-03 12:27:14453ブラウズ

Why Am I Getting a

「非オブジェクトのプロパティを取得しようとしています」エラーのトラブルシューティング

「非オブジェクトのプロパティを取得しようとしています」というエラー メッセージが表示された場合-object」の場合は、その発生のコンテキストを調べることが重要です。原因と解決策を理解するために、特定のケースを詳しく調べてみましょう。

問題ステートメント

PHP スクリプトでは、クエリはデータベースからデータを取得しますが、取得した結果の特定のプロパティにアクセスしようとすると、エラーが発生します。関連するコード スニペットは次のとおりです。

コントロール ページ

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

ビュー ページ

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

< h3>原因分析

根本的な原因は、mysql_fetch_object() がオブジェクトの配列を返すという想定にありますが、実際には単一のオブジェクトのみを取得します。ビュー ページで結果を反復処理するときに、配列要素のプロパティにアクセスしようとします。この場合、配列要素は配列ではなく、単一のオブジェクトです。

Resolution

問題を解決するには、スクリプトを適切に変更する必要があります。考えられる解決策の 1 つは、ループを使用して結果をオブジェクトの配列に変換することです。

$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;
}

while ループを使用して結果を反復処理することで、各オブジェクトを $sidemenus 配列に追加して配列を作成できます。これはビュー ページで期待どおりにアクセスできます。

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

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