首页 >数据库 >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() 返回一个对象,而不是对象数组。要解决此问题,您有两个选择:

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;

此方法创建一个数组sidemenu 对象,允许您根据需要迭代它们。

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中文网其他相关文章!

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