PDO执行查询无法获取结果 返回空白页面无任何报错提示
问题原因及修复方案
核心错误点
- 未开启PDO错误上报:默认PDO不会主动抛出错误,运行时的致命错误被屏蔽导致页面空白
- 取值方式和设置的返回格式不匹配:你配置了
PDO::ATTR_DEFAULT_FETCH_MODE为PDO::FETCH_OBJ,查询结果会返回对象,但是代码中用数组下标$row['字段名']的方式取值,类型不匹配触发致命错误 - 多余的fetch操作消耗了第一条数据:执行execute后先调用了一次
fetch(),结果集指针直接移到第二条,若查询结果只有1条,后续循环不会输出任何内容
修复后的代码
// 初始化PDO时新增错误模式配置,开启异常抛出 $pdo_connect = new PDO($dsn, $db_host_admin_username, $db_host_admin_pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]); $pdo_connect->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ); $pdo_connect->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); // 若不确定$bid_id是否正常赋值,可放开下一行调试 // var_dump($bid_id); exit; $sql_property_info_request = "SELECT * FROM property_offered_bid WHERE bid_id_property_offered_bid=:bid_id"; $stmt_property_info_request = $pdo_connect->prepare($sql_property_info_request); $stmt_property_info_request->execute(['bid_id' => $bid_id]); // 移除多余的第一次fetch操作 // 取值改为对象属性方式,匹配FETCH_OBJ的返回格式 while ($row = $stmt_property_info_request->fetch()) { echo $row->property_offered_property_offered_bid."<br />\n"; }
如果习惯用数组形式读取字段,也可以将默认返回格式修改为PDO::FETCH_ASSOC,即可继续使用$row['字段名']的方式取值。
额外调试建议
如果修改后仍无输出,可以先打印查询匹配的总条数验证是否存在符合条件的数据:
echo $stmt_property_info_request->rowCount();
内容的提问来源于stack exchange,提问作者Jojo
相关产品推荐
相关产品推荐

