SQL正常运行的查询代码在PHP网站运行报mysqli_num_rows参数错误
问题排查与解决方案
错误原因
- 核心问题:SQL语句中带空格的字段名错误使用单引号包裹。SQL语法中单引号用于定义字符串常量,你写的
'Social Media Opinion'会被识别为普通字符串而非表svar2的字段,导致SQL执行失败返回false,将布尔值传入mysqli_num_rows就触发了类型错误。phpMyAdmin能正常运行是因为其内置了更高的语法容错配置,会自动修正这类标识符引用错误。 - 次要问题:代码缺少SQL执行结果校验,没有判断
mysqli_query的返回值是否合法就直接调用后续方法;同时<thead>标签没有正确闭合,输出的HTML结构存在语法问题。 - 优化提示:使用
sum()聚合函数的查询永远只会返回1行结果,不需要用mysqli_num_rows判断行数再遍历,可直接读取返回结果。
修复后的完整代码
// 字段名用反引号包裹,不是单引号 $sql = "select sum(case when `Social Media Opinion`='I like social media.' and `Social Media Usage`='Every day' then 1 else 0 end) as ye from svar2;"; $result = mysqli_query($conn, $sql); // 先判断SQL执行是否成功 if (!$result) { // 开发环境可输出错误排查问题,生产环境替换为友好提示 die("SQL执行错误:" . mysqli_error($conn)); } $row = mysqli_fetch_assoc($result); ?> <thead> <tr> <td>Internet Fatigue out of 10</td> </tr> </thead> <tbody> <tr> <td><?php echo $row['ye']; ?></td> </tr> </tbody>
内容的提问来源于stack exchange,提问作者hanad
相关产品推荐
相关产品推荐

