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

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

Patricia Arquette
リリース: 2024-12-03 12:27:14
オリジナル
367 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート