首页 >后端开发 >php教程 >为什么在访问数据库结果时出现'尝试获取非对象的属性”错误?

为什么在访问数据库结果时出现'尝试获取非对象的属性”错误?

Barbara Streisand
Barbara Streisand原创
2024-11-08 01:13:03404浏览

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

通过使用这些解决方案中的任何一个,您可以从以下位置检索数据数据库并避免错误“尝试获取非对象的属性。”

以上是为什么在访问数据库结果时出现'尝试获取非对象的属性”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn