You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:43:32