【问题标题】:Error boolean given in... MYSQL在... MYSQL 中给出的错误布尔值
【发布时间】:2013-06-11 14:03:02
【问题描述】:

请帮助我不知道这个函数有什么问题......

$gsql = "SELECT * FROM posts WHERE group='$group_name' ORDER BY postdate DESC LIMIT 0,20";
$gquery = mysqli_query($db_conx, $gsql);
$gstatusnumrows = mysqli_num_rows($gquery);

while ($grow = mysqli_fetch_array($gquery, MYSQLI_ASSOC)) {

它一直说这个错误:-

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in D:\group.php on line 3

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in D:\group.php on line 5

【问题讨论】:

  • 表示你正在执行的查询失败。
  • boolean given 表示对mysqli_query 的调用返回FALSE。这可能是因为 SQL 查询包含错误 - 列 group 是一个已定义的单词,应该转义:`group`
  • @shadyyx 不,不返回任何行的 SELECT 查询会返回空结果集,而不是布尔值。
  • 变量$group_name 定义了吗?
  • @Kolink 是的,我意识到并修改了评论 ;-) 谢谢。

标签: php mysql mysqli phpmyadmin


【解决方案1】:

这意味着你的查询失败了。

[mysqli_query] 失败时返回FALSE。对于成功的SELECTSHOWDESCRIBEEXPLAIN 查询mysqli_query() 将返回一个mysqli_result 对象。对于其他成功查询mysqli_query() 将返回TRUE

所以请使用mysqli_error 找出您做错了什么。但是,在这种情况下,这是因为您有一个名为“组”的列。 GROUP 是 MySQL 中的保留字。为了安全起见,所有数据库、表和列名都应该用反引号 ` 括起来,以防止任何可能的歧义。

【讨论】:

  • 另一种不需要使用反引号来避免歧义的方法是使用表名或(最好)表别名来限定所有列引用,例如SELECT p.* FROM posts p WHERE p.group = ... ORDER BY p.postdate ... 。这有一个额外的好处(当引用了多个表时),避免了不明确的列引用。
  • 非常感谢您的帮助,我更改了数据库中的列名,非常感谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多