访问数据库结果时出现错误:“尝试获取非对象的属性”
当尝试在 PHP 中访问数据库结果时,您可能会遇到错误“尝试获取非对象的属性”。当您尝试访问不可用的数据库结果对象的属性时,会发生此错误。
要解决此问题,请验证您的数据库查询是否返回预期结果以及返回变量的数据类型是正确的。
错误的起源
考虑此示例代码,其中可能会出现相关错误:
// Retrieve a single row from the database $results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id` = '{$menu}' ORDER BY `id` ASC LIMIT 1", $con); // Attempt to access the result as an object $sidemenus = mysql_fetch_object($results); // Iterate over the result and display properties foreach ($sidemenus as $sidemenu) { echo $sidemenu->mname . "<br />"; }
可能会发生错误在 foreach 循环中,因为 mysql_fetch_object() 返回单个对象,而不是对象数组。因此,您无法像数组一样对其进行迭代。
解决方案
要解决此问题,您可以修改代码以正确获取结果。一种选择是使用 mysql_fetch_array() 而不是 mysql_fetch_object(),后者返回行值的数组。
或者,您可以使用循环来获取所有行并将它们存储在数组中:
$sidemenus = array(); while ($sidemenu = mysql_fetch_object($results)) { $sidemenus[] = $sidemenu; } // Iterate over the sidemenus array and display properties foreach ($sidemenus as $sidemenu) { echo $sidemenu->mname . "<br />"; }
其他注意事项
考虑使用数据库抽象层(例如 PDO)而不是过时的 MySQL 函数。 PDO 提供了一种更现代、更安全的与数据库交互的方式。
例如,使用 PDO 获取单行作为对象:
$sth = $pdo->prepare("SELECT * FROM sidemenu WHERE `menu_id` = :menu_id ORDER BY `id` ASC LIMIT 1"); $sth->execute([':menu_id' => $menu]); $sidemenu = $sth->fetchObject(); if ($sidemenu) { echo $sidemenu->mname; }
以上是为什么在 PHP 中访问数据库结果时出现'尝试获取非对象的属性”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!