求助:无法定位mysqli_fetch_assoc()参数错误原因,附相关代码
解决mysqli_fetch_assoc()的布尔值参数错误问题
让我来帮你拆解这个问题——你遇到的mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given警告,核心原因是你传给mysqli_fetch_assoc()的不是合法的MySQL查询结果集,而是布尔值false(说明你的SQL查询执行失败了)。咱们从你的代码里揪出几个关键问题:
1. 连接检查的变量名写错了
你用$con = mysqli_connect(...)创建了连接对象,但后面判断连接失败时,写的是$conn->connect_error——这里的$conn是个未定义的变量!正确的应该是用$con->connect_error,不然连接真的失败时,你连错误信息都看不到,还可能掩盖底层的连接问题。
2. 查询结果的判断是赋值而非比较
你写的if ($result = true)是把true赋值给$result,这行代码永远会返回true,不管你的SQL查询有没有成功执行。哪怕查询失败返回了false,这行赋值操作会把$result改成true,然后你还是会进入循环去调用mysqli_fetch_assoc(),自然就触发了警告。
正确的判断方式应该是直接检查$result是否为有效结果集:
if ($result) { // 处理结果 }
3. 额外的优化建议
- 排查查询失败的具体原因:可以在
else分支里输出MySQL的错误信息,比如echo "查询失败: " . mysqli_error($con);,这样能快速知道SQL语句是不是有拼写错误(比如表名、字段名写错)。 - 绝对不要硬编码账号密码到SQL里:实际开发中一定要用预处理语句,避免SQL注入风险,哪怕是测试代码也最好养成好习惯。
修正后的完整代码示例
<?php $servername = "localhost"; $username = "roo"; $password = "Tri"; $dbname = "frika"; $con = mysqli_connect($servername, $username, $password, $dbname); // 检查连接(修正变量名) if ($con->connect_error) { die("Connection failed: " . $con->connect_error); } else { $query = "SELECT * FROM admin_users WHERE username = 'alex' and psw ='1234'"; $result = mysqli_query($con, $query); // 正确判断查询结果 if ($result) { while ($row = mysqli_fetch_assoc($result)) { echo $row['id']; } // 记得释放结果集 mysqli_free_result($result); } else { // 输出具体错误信息方便排查 echo "查询失败或无结果: " . mysqli_error($con); } } // 关闭连接 mysqli_close($con); ?>
内容的提问来源于stack exchange,提问作者Gatua
相关产品推荐
相关产品推荐

