1

在我的 MySQL 数据库中查询表时出现错误。当传递的变量中没有值时,这是标准的 mysqli_num_rows :

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in folder/file.php on line 29

问题是我找不到语法错误。我已经看过很多次了。这是我的代码:

$sql_messages = "SELECT * FROM messages WHERE to='$userid'";
$result_messages = $mysqli->query($sql_messages);
$num_rows_messages = mysqli_num_rows($result_messages);

我尝试了一个 fetch 数组,但这给了我类似的错误。我想没有任何东西传递到 $result_messages 中。我回显了 $userid,它有一个值,我检查了我的数据库,有一个表 'messages' 和一个字段'to'。我已连接到正确的数据库,因为在此查询之前我有此代码:

$sql="SELECT * FROM users WHERE firstname='$firstname' && lastname='$lastname'";
$result = $mysqli->query($sql);
$row = mysqli_fetch_array($result);

这很好用。这是页面上的第三个查询,是否有某种限制?有没有人看到我忽略的语法错误?谢谢,如果是小错误,请见谅!

4

1 回答 1

4

这是因为$mysqli->query()返回了 boolean FALSE根据mysqli::query()docs,它在发生错误时会执行。您可以通过访问$mysqli->errno和获取有关错误的更多详细信息$mysqli->error

我猜问题的根源在于查询引用了一个名为 的列to,这是一个MySQL 保留字。尝试to用反引号将查询中的单词括起来。像这样:

$sql_messages = "SELECT * FROM messages WHERE `to`='$userid'";

确实,尽管您应该避免命名列和表的保留字。如果可行,请考虑重命名该列。

于 2012-11-15T06:17:40.663 回答