”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么在访问数据库结果时出现“尝试获取非对象的属性”错误?

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

发布于2024-11-18
浏览:412

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