PHP:没有任何意义的SQL标记

时间:2012-05-09 22:59:25

标签: php sql boolean

  

可能重复:
  mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

我的代码在我检查后工作​​正常,但现在它似乎已经坏了。这是错误:

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/nerblog/public_html/nerblog/arch.php on line 4

......这是第4行的代码:

    $q = mysql_query("SELECT * FROM main WHERE month='$month' AND year='$year' LIMIT 12 ORDER BY id DESC");

    while ($sql = mysql_fetch_array($q ))

3 个答案:

答案 0 :(得分:3)

您的SQL查询失败。尝试将“ORDER”后面的“LIMIT”命令移动到查询结尾:

SELECT * FROM main WHERE month='$month' AND year='$year' ORDER BY id DESC LIMIT 12

答案 1 :(得分:2)

根据文件:

  

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,或者在出错时返回FALSE。

     

对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,mysql_query()成功时返回TRUE,错误时返回FALSE。

     如果用户没有访问查询引用的表的权限,则mysp_query()也将失败并返回FALSE。

mysql_fetch_array()函数需要mysql_query返回的结果资源。如果该调用失败,则返回false,这是您传递给mysql_fetch_array()函数的原因,因此它失败的原因。

问题实际上在你的SQL中。您需要在查询中最后使用LIMIT子句:

 SELECT * FROM main WHERE month='$month' AND year='$year' ORDER BY id DESC LIMIT 12 

确保查询错误的一种方法不会导致其他代码出现问题,那就是先检查一下这个值:

$q = mysql_query("SELECT * FROM main WHERE month='$month' AND year='$year' ORDER BY id DESC LIMIT 12");

if($q != FALSE)
{
   // Query didn't fail, so get results
   while ($result = mysql_fetch_array($q))
   {
      // Do something with $result
   }

}

答案 2 :(得分:1)

mysql_error()存在是有原因的。

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“ORDER BY id DESC”附近使用正确的语法

意思是它没有期望看到你放置它的ORDER BY。原因是LIMIT应该在 ORDER BY之后来,而不是之前。