PHP报错Trying to get property of non-object,新手求助解决方案
解决PHP错误:Trying to get property of non-object
嘿,作为PHP新手遇到这个问题很正常,我来帮你一步步拆解并解决这个错误!
错误原因解析
你看到的Trying to get property of non-object错误,本质是你试图访问一个非对象的属性。具体到你的代码if ($data->num_rows > 0),说明$data并不是一个有效的MySQLi结果对象——它大概率是false,这意味着你的数据库查询执行失败了。
一步步解决问题
我们从最基础的环节开始排查:
1. 先确保数据库连接成功
在创建连接后,一定要添加连接检查,避免后续操作基于一个失败的连接:
$connection = new mysqli("localhost", "root", "", "hackathon"); // 新增连接检查 if ($connection->connect_error) { die("数据库连接失败: " . $connection->connect_error); }
2. 检查SQL查询的合法性
你代码里的$data = $c...应该是执行查询的语句(比如$data = $connection->query($sql);),先确保你的SQL语句没有语法错误:
- 先把SQL语句打印出来(测试用,上线后记得删掉),手动在数据库里执行看看是否能得到结果:
// 假设你的查询语句,根据实际表/字段修改 $sql = "SELECT * FROM your_table WHERE email = '$email' AND token = '$token'"; echo $sql; // 打印SQL,检查是否有拼写错误 $data = $connection->query($sql); - 常见的SQL错误:表名/字段名拼写错误、引号不匹配、语法不符合MySQL规范。
3. 在访问num_rows前检查查询结果
在使用$data->num_rows之前,先判断$data是否为有效对象,避免报错:
// 检查查询是否执行成功 if ($data === false) { die("查询执行失败: " . $connection->error); } // 现在再安全地访问num_rows if ($data->num_rows > 0) { // 这里写你的业务逻辑,比如验证成功的处理 echo "验证通过!"; } else { echo "无效的token或邮箱地址"; }
完整的修正后代码示例
结合你的原始代码,整理后的完整版本如下:
<?php if (isset($_GET["token"]) && isset($_GET["email"])) { $connection = new mysqli("localhost", "root", "", "hackathon"); // 检查数据库连接 if ($connection->connect_error) { die("数据库连接失败: " . $connection->connect_error); } $email = $connection->real_escape_string($_GET["email"]); $token = $connection->real_escape_string($_GET["token"]); // 替换成你实际的查询语句 $sql = "SELECT * FROM user_verification WHERE email = '$email' AND token = '$token'"; $data = $connection->query($sql); // 检查查询结果 if ($data === false) { die("查询错误: " . $connection->error); } if ($data->num_rows > 0) { echo "验证成功!"; // 这里添加你的后续处理逻辑 } else { echo "无效的验证信息,请检查链接"; } $connection->close(); // 记得关闭数据库连接 } else { echo "缺少必要的验证参数,请检查链接"; } ?>
内容的提问来源于stack exchange,提问作者rahul
相关产品推荐
相关产品推荐

