如何使用自定义Database类查询MySQL数据,查询结果异常怎么解决
问题原因
你封装的Database类存在两处核心问题:
- DSN连接字符串拼写错误
构造方法中创建PDO实例的DSN参数缺少host和值之间的等于号:
原错误代码:
$this->pdo = new PDO("mysql:host".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS);
拼接后得到的DSN为mysql:hostlocalhost;dbname=database,不符合PDO的DSN格式规范,即使你看到输出了success,也不代表实际连接到了你期望的目标数据库。
2. 未开启PDO错误提示、未指定字符集
PDO默认采用静默报错模式,连接、执行阶段的错误不会主动输出,你无法感知到异常;同时如果两个测试示例的默认字符集不一致,也会导致字符串条件匹配失效,查询不到预期结果。
修复方案
直接修改Database.php的构造方法即可:
protected function __construct(){ // 补全host参数后的=,指定字符集,开启PDO异常报错 $this->pdo = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=utf8mb4", DB_USER, DB_PASS, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]); echo "success"; }
效果验证
修复后重新运行index2.php,就能得到和index1.php一致的查询结果。
内容的提问来源于stack exchange,提问作者Kyv
相关产品推荐
相关产品推荐

