You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:12:46