非オブジェクトのプロパティにアクセスしようとしています
データベースからデータを取得しようとすると、「プロパティを取得しようとしています」というエラーが発生します非オブジェクトの。」このエラーは、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 は、データベースと対話するためのより現代的で効率的な方法を提供します。 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 サイトの他の関連記事を参照してください。