我收到错误: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");
}
答案 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检查查询是否返回错误。 这会给你更多信息吗?