mysqli_num_rows返回false但数据已写入数据库,附代码求助
解决mysqli_num_rows返回false但数据成功插入的问题
Hey there! Let's break down this confusing behavior you're seeing.
核心原因:mysqli_num_rows不适合判断INSERT操作结果
mysqli_num_rows的作用是获取查询结果集的行数,它只对SELECT、SHOW、DESCRIBE这类会返回数据集的SQL语句有效。而INSERT语句执行成功后,并不会生成结果集——所以你调用mysqli_num_rows时,它自然会返回false,这完全是正常现象,和数据是否成功插入没有直接关联。
正确的判断方法
要确认INSERT操作是否成功,推荐用这两种方式:
- 检查
mysqli::query()的返回值:如果INSERT执行成功,$db_connect->query($your_insert_sql)会返回true;如果失败(比如SQL语法错误、约束冲突),则返回false。 - 查看
mysqli::affected_rows属性:这个属性会返回最后一次SQL操作影响的行数。对于INSERT来说,成功插入一行时它的值是1;如果没有行被插入(比如重复主键),值为0;操作失败则为-1。
修正后的代码示例
假设你原来的代码里有类似错误逻辑:
$insert_sql = "INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')"; $result = $db_connect->query($insert_sql); // 错误用法:用mysqli_num_rows判断INSERT结果 if (mysqli_num_rows($result)) { echo "数据插入成功"; }
改成正确的写法:
$insert_sql = "INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')"; if ($db_connect->query($insert_sql)) { // 用affected_rows确认插入行数 if ($db_connect->affected_rows > 0) { echo "成功插入 {$db_connect->affected_rows} 条数据"; } else { echo "没有数据被插入(可能是重复数据)"; } } else { // 打印错误信息排查问题 echo "插入失败:" . $db_connect->error; }
额外提示
日常开发中,记得通过$db_connect->error获取具体错误信息,这能帮你快速定位SQL语法、数据库约束等潜在问题,比单纯看返回值更高效。
内容的提问来源于stack exchange,提问作者Valentin Dragoi
相关产品推荐
相关产品推荐

