使用PHP实现学生信息自动填充表单时mysqli_fetch_assoc报错如何解决
你的报错mysqli_fetch_assoc() expects parameter 1 to be mysqli_result是因为mysqli_query执行失败返回了布尔值false,而非查询结果对象,结合你的代码共有以下几处问题:
- 数据库连接和查询写法混用了面向对象和过程式两种风格,导致调用逻辑错误
- 没有添加查询错误判断逻辑,无法定位SQL执行失败的具体原因
- 单条数据查询不需要使用while循环,且循环内没有把结果赋值到全局作用域,循环结束后HTML中无法读取到
$row变量 - 需确认
students表字段名和你取值的字段名是否匹配,比如你SQL里筛选的是Id字段,代码里取student_id,如果字段名不对应也会导致查询报错
修正后的数据库连接代码(Connection.php)
<?php DEFINE ('DB_User', 'testuser'); DEFINE ('DB_Password', 'abc123*'); DEFINE ('DB_Host', 'localhost'); DEFINE ('DB_Name', 'student'); // 统一使用面向对象写法 $dbc = new mysqli(DB_Host, DB_User, DB_Password, DB_Name); if($dbc->connect_errno) { printf("连接数据库失败: %s", $dbc->connect_error); exit(); } ?>
修正后的PHP查询代码
<?php require_once ('Connection.php'); // 这里的字段名请和实际表字段对应,如果表中id字段名就是student_id,把SQL里的Id改成student_id $query = "SELECT * from students where Id = 102"; $result = $dbc->query($query); // 先判断查询是否成功 if (!$result) { die("SQL执行错误: " . $dbc->error); } // 单条数据直接取一行即可,不需要循环 $row = $result->fetch_assoc(); // 释放查询资源 $result->free(); $dbc->close(); ?>
表单代码优化建议
表单原有逻辑可以直接复用,如果对应id的学生数据不存在,$row会为null,取值的时候会报错,建议输入框的value部分改成<?php echo $row ? $row['student_id'] : ''; ?>格式,避免数据不存在时报错。
内容的提问来源于stack exchange,提问作者Kazumi411
相关产品推荐
相关产品推荐

