尝试访问非对象的属性
尝试从数据库检索数据时,遇到错误“尝试获取属性非对象的。”当您尝试访问 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);
通过使用这些解决方案中的任何一个,您可以从以下位置检索数据数据库并避免错误“尝试获取非对象的属性。”
以上是为什么在访问数据库结果时出现'尝试获取非对象的属性”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!