尝试访问非对象的属性
尝试从数据库检索数据时,遇到错误“尝试获取属性非对象的。”当您尝试访问 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 提供了一种更现代、更高效的与数据库交互的方式。 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