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

关联两张SQL表展示数据时PHP报错:mysqli_num_rows参数异常求助

解决mysqli_num_rows()报错的问题

Hey there! 我来帮你搞定这个报错问题~

首先,这个错误Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given其实是在告诉你:你的SQL查询执行失败了,返回的是布尔值false,而不是预期的查询结果集对象mysqli_result,所以mysqli_num_rows()没法处理它。

第一步:先找出SQL查询失败的具体原因

你现在需要在执行查询后立刻添加错误检查,这样就能看到具体哪里错了。比如在你的代码里,执行查询的部分改成这样:

// 假设你的查询语句是这样的
$sql = "SELECT 你的字段 FROM ratings WHERE 条件";
$result = mysqli_query($你的数据库连接变量, $sql);

// 新增错误检查
if (!$result) {
    die("SQL查询失败,错误信息:" . mysqli_error($你的数据库连接变量));
}

运行这段代码后,你就能看到具体的错误提示——比如字段名拼写错了、表名写错了、SQL语法有问题,甚至是数据库权限不足,这些都会导致查询失败返回false。

结合你的表结构,常见的坑点

你的ratings表结构是user_id | ISBN | ...,这里可能出现的问题有:

  • 大小写问题:如果你的数据库运行在Linux系统上,MySQL是区分表名和字段名大小写的,比如你写的是isbn而不是ISBN,就会报错。
  • SQL语法错误:比如字段名和保留字冲突(虽然user_id和ISBN都不是保留字,但如果有其他字段是,要加反引号``包裹,比如SELECT user FROM ...);或者查询语句里漏了逗号、括号。
  • 变量拼接错误:如果你的SQL语句里用到了PHP变量,比如"SELECT * FROM ratings WHERE user_id = $id",如果$id没正确转义或者为空,就会导致语法错误——这种情况强烈建议用预处理语句,既安全又能避免语法问题。

给你一个正确的示例代码

假设你要查询ratings表的所有数据,完整的正确流程应该是这样的:

// 先确保数据库连接正常
$conn = mysqli_connect("localhost", "你的用户名", "你的密码", "你的数据库名");
if (!$conn) {
    die("数据库连接失败:" . mysqli_connect_error());
}

// 编写正确的SQL语句,注意字段名和表名的正确性
$sql = "SELECT user_id, ISBN FROM ratings";
$result = mysqli_query($conn, $sql);

// 检查查询是否成功
if (!$result) {
    die("SQL执行错误:" . mysqli_error($conn));
}

// 现在可以正常使用mysqli_num_rows了
if (mysqli_num_rows($result) > 0) {
    // 循环输出数据
    while ($row = mysqli_fetch_assoc($result)) {
        echo "用户ID:" . $row["user_id"] . ",ISBN:" . $row["ISBN"] . "<br>";
    }
} else {
    echo "没有找到任何数据";
}

// 记得关闭数据库连接
mysqli_close($conn);

更安全的方式:使用预处理语句

如果你的查询里需要用到变量(比如根据user_id查询),一定要用预处理语句,避免SQL注入同时也能避免很多语法错误:

$target_user_id = 123; // 假设这是你要查询的用户ID

$stmt = mysqli_prepare($conn, "SELECT user_id, ISBN FROM ratings WHERE user_id = ?");
// 绑定参数,"i"表示这个参数是整数类型
mysqli_stmt_bind_param($stmt, "i", $target_user_id);
// 执行查询
mysqli_stmt_execute($stmt);
// 获取结果集
$result = mysqli_stmt_get_result($stmt);

// 后续处理和之前一样
if (mysqli_num_rows($result) > 0) {
    while ($row = mysqli_fetch_assoc($result)) {
        echo "用户ID:" . $row["user_id"] . ",ISBN:" . $row["ISBN"] . "<br>";
    }
}

先按照上面的步骤添加错误检查,找到具体的错误原因,再针对性修改,应该就能解决问题啦~

内容的提问来源于stack exchange,提问作者Dustin Poff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:57:12