首页 > 后端开发 > php教程 > 为什么在 PHP 中访问数据库结果时出现'尝试获取非对象的属性”错误?

为什么在 PHP 中访问数据库结果时出现'尝试获取非对象的属性”错误?

Barbara Streisand
发布: 2024-11-08 04:10:02
原创
706 人浏览过

Why Am I Getting the

访问数据库结果时出现错误:“尝试获取非对象的属性”

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板