mysqli_num_rows() 期望参数通过同一页面上的较早查询有效
Posted
技术标签:
【中文标题】mysqli_num_rows() 期望参数通过同一页面上的较早查询有效【英文标题】:mysqli_num_rows() expects paramter though an earlier query on the same page works 【发布时间】:2012-11-03 18:03:06 【问题描述】:在我的 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);
而且效果很好。这是页面上的第三个查询,是否有某种限制?有没有人看到我忽略的语法错误?谢谢,如果是一个小错误,请见谅!
【问题讨论】:
【参考方案1】:这是因为$mysqli->query()
返回了布尔值FALSE
,according to the mysqli::query()
docs 在发生错误时会这样做。您可以通过访问$mysqli->errno
和$mysqli->error
获取有关错误的更多详细信息。
我猜测问题的根源在于查询引用了名为to
的列,该列是MySQL reserved word。尝试在您的查询中使用反引号将单词 to
括起来。像这样:
$sql_messages = "SELECT * FROM messages WHERE `to`='$userid'";
确实,尽管您应该避免命名列和表的保留字。如果可行,请考虑重命名该列。
【讨论】:
原来如此。这是使用“to”这个词。我没有意识到那已经被保留了。我运行了错误消息,但什么也没回来,所以这是一个很好的捕获。很高兴知道,我需要确保我的领域在未来变得更加独特...... 作为旁注,您构建查询的方式(通过字符串连接),您正在创建SQL injection vulnerabilities。如果可能,考虑使用 mysqli 准备好的语句或 PDO。 好的,谢谢。有人告诉我 PDO,我会调查一下。我有点从头开始。非常感谢您的帮助!以上是关于mysqli_num_rows() 期望参数通过同一页面上的较早查询有效的主要内容,如果未能解决你的问题,请参考以下文章
警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,bool 给定...我该怎么办? [复制]
警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,布尔值在 /home/digibeem/public_html/forgot_pass.php 第 55 行 [
在 PHP 中,为啥 mysqli_num_rows 不为返回行数为 0 的查询返回整数?
PHP操作数据库出现错误:mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in