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