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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-12-03 17:28:10166ブラウズ

Why am I getting a

PHP の非オブジェクト プロパティ アクセス エラーへの対処

エラー メッセージ「通知: 非オブジェクトのプロパティを取得しようとしています」は通常、この問題は、適切に初期化されていないオブジェクト、または存在しないオブジェクトのプロパティにアクセスしようとすると発生します。提供されたコードでは、このエラーは mysql_fetch_object() 関数の問題により発生します。

mysql_fetch_object() 関数は、結果セットから単一の行をオブジェクトとして取得します。コントロール ページでは、この関数を正しく使用して単一のサイドメニュー レコードをフェッチしています:

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

しかし、ビュー ページでは、$sidemenus 変数を配列であるかのように反復しようとしています。オブジェクトの:

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

mysql_fetch_object() はオブジェクトの配列ではなくオブジェクトを返すため、この仮定は正しくありません。この問題を解決するには、次の 2 つのオプションがあります:

1. while ループを使用します:

while ループを使用して、結果セットを反復処理し、各サイドメニュー レコードをオブジェクトとして取得できます:

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

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

このアプローチでは、次の配列が作成されます。サイドメニュー オブジェクトを作成し、必要に応じて反復処理できるようにします。

2. PDO を使用する (推奨):

PDO は、セキュリティと柔軟性が向上した、より最新の推奨されるデータベース抽象化レイヤーです。 PDO を使用すると、 fetchAll(PDO::FETCH_OBJ) メソッドを使用してデータをオブジェクトとして取得できます。その方法は次のとおりです:

$stmt = $con->prepare("SELECT * FROM sidemenu WHERE `menu_id`=? ORDER BY `id` ASC LIMIT 1");
$stmt->execute(array($menu));
$sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ);

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

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

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