MySQL Num在if语句中发出警告?

时间:2011-06-05 22:58:02

标签: php mysql

我收到错误:Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in.... on line ..

请你告诉我,我做错了导致这件事。我不相信我。

        if (mysql_num_rows(mysql_query("SELECT * FROM Likes WHERE `postID` = '$postID' AND `userID` = '$accountID'")) < 1) {
            exit("Cant like a post twice");
        }

4 个答案:

答案 0 :(得分:2)

您也可以通过直接从数据库中选择计数来简化您的SQL,这比选择所有行更有效,然后计算计数

$res = mysql_query("SELECT COUNT(*) FROM Likes WHERE 
                      `postID` = '$postID' AND `userID` = '$accountID'");

// check for mysql errors
if (mysql_error()) {
    die(mysql_error());
}

list($count) = mysql_fetch_row($res);

答案 1 :(得分:2)

根据yes123的建议,mysql_error()会告诉你原因。但是有两条评论:

  • 您不应使用mysql_num_rows()来计算结果集。而是发出SELECT COUNT(*)并检查返回的值。这样效率更高。

  • 针对您的特定问题有一个更好的解决方案:只需在(postID,userID)字段中添加一个UNIQUE键即可,您可以跳过此测试。相反,只需尝试插入新记录,然后检查mysql_errno()值。如果它返回0,那么插入工作;如果它返回1062(ER_DUP_ENTRY),则插入失败,因为已经存在类似的记录。

答案 2 :(得分:1)

永远不要像这样嵌套电话。

之前运行
mysql_query("SELECT * FROM Likes WHERE 
                      `postID` = '$postID' AND `userID` = '$accountID'") 
or die(mysql_error());

检查错误是什么。

要检查错误,我更喜欢这种表示法(如评论中所述)

   $res= mysql_query("SELECT * FROM Likes WHERE 
                          `postID` = '$postID' AND `userID` = '$accountID'");

   if(!is_resource($res))
     die(mysql_error());

答案 3 :(得分:1)

首先,我希望您在查询中正确地转义了$ postID和$ accountID,就像不打开SQL注入的大门一样。

然后,您应该在将查询结果直接放入mysql_num_rows之前检查查询结果。我猜你在查询(或连接)中有错误,然后你最终调用mysq_num_rows(false)。 尝试使用mysql_error检查查询是否返回错误。 这会给你更多信息吗?

相关问题