SQL排序查询报错:mysqli_fetch_assoc()参数类型不符求助
解决 mysqli_fetch_assoc() 参数错误的问题
你遇到的这个错误本质是SQL语句存在语法错误,导致mysqli_query()执行失败,返回了布尔值false,而不是预期的查询结果集,自然无法被mysqli_fetch_assoc()处理。
问题根源:多余的分号
看你的SQL语句,不管是直接编写还是拼接的版本,都在WHERE子句的末尾多写了一个分号:
// 直接写法里的错误分号 $aktivnei = 'SELECT * FROM `test3` WHERE aktiv LIKE "Nei" AND datex BETWEEN (CURRENT_DATE() - INTERVAL 7 DAY) AND CURRENT_DATE(); ORDER BY datex DESC'; // 拼接写法里的错误分号 $aktivnei .= ' WHERE aktiv LIKE "Nei" AND datex BETWEEN (CURRENT_DATE() - INTERVAL 7 DAY) AND CURRENT_DATE();';
分号在SQL中是语句结束标记,加了这个分号之后,ORDER BY datex DESC就被当成了一条独立的、不完整的SQL语句,数据库无法识别,直接导致查询失败。
修正后的正确写法
直接写法
$aktivnei = 'SELECT * FROM `test3` WHERE aktiv LIKE "Nei" AND datex BETWEEN (CURRENT_DATE() - INTERVAL 7 DAY) AND CURRENT_DATE() ORDER BY datex DESC'; $resultaktivnei = mysqli_query($conn,$aktivnei);
拼接写法
$aktivnei = 'SELECT * FROM `test3`'; $aktivnei .= ' WHERE aktiv LIKE "Nei" AND datex BETWEEN (CURRENT_DATE() - INTERVAL 7 DAY) AND CURRENT_DATE()'; $aktivnei .= ' ORDER BY datex DESC'; $resultaktivnei = mysqli_query($conn,$aktivnei);
额外排查技巧
以后遇到类似的SQL执行失败问题,可以在mysqli_query()之后加上错误检测,快速定位具体的语法问题:
$resultaktivnei = mysqli_query($conn,$aktivnei); if (!$resultaktivnei) { die('SQL错误: ' . mysqli_error($conn)); }
这样就能直接看到数据库返回的具体错误信息,比单纯看PHP的参数错误提示更高效。
内容的提问来源于stack exchange,提问作者Seb
相关产品推荐
相关产品推荐

