「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > データベースの結果にアクセスすると「非オブジェクトのプロパティを取得しようとしています」というエラーが表示されるのはなぜですか?

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

2024 年 11 月 18 日に公開
ブラウズ:115

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);

さらに、表示ページで:

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);

これらの解決策のいずれかを利用すると、データベースからデータを取得し、「非オブジェクトのプロパティを取得しようとしています。」というエラーを回避できます。 「

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3