使用PDO封装类查询存在的数据库记录却返回NULL的问题
问题分析:PDO封装类查询后返回NULL的原因及解决办法
嘿,我一眼就发现问题所在啦!你的代码逻辑其实没毛病,查询确实执行了,数据也拿到了,但你没有把查询结果返回给调用者,所以才会得到NULL。
咱们来拆解一下:
看你User类里的find方法:
public function find($id) { $this->data = $this->db->run("SELECT * FROM user_account WHERE id = ?", [$id])->fetch(); }
这个方法确实把查询结果赋值给了类的$data属性,但它没有写return语句!PHP里如果函数没有明确返回值,默认会返回NULL,所以当你执行$a = $user->find(3);时,$a自然就是NULL了。
验证一下
你可以试试在调用find后,直接打印User实例的data属性:
$user = new User(); $user->find(3); var_dump($user->data); // 这里就能看到正确的查询结果啦
两种修复方案
方案一:让find方法返回查询结果
修改find方法,加上返回语句:
public function find($id) { $this->data = $this->db->run("SELECT * FROM user_account WHERE id = ?", [$id])->fetch(); return $this->data; // 新增这一行,把结果返回给调用者 }
这样再执行$a = $user->find(3); var_dump($a);就能拿到预期的用户数据了。
方案二:保持现有方法,直接访问类属性
如果你不想修改find方法的结构,那就直接访问User实例的data属性来获取结果,就像刚才验证的那样。
另外补充一句:因为你的PDO设置了ERRMODE_EXCEPTION,如果数据库连接或者查询有问题,早就抛出异常了,所以可以确定连接和查询本身是正常的,就是返回值的小疏忽~
内容的提问来源于stack exchange,提问作者Daksh B
相关产品推荐
相关产品推荐

