-4

这是我到目前为止所拥有的:

$checkbonus = mysql_query("Select theurl from `vaultpromo` where (accid=0 or accid=$acctype) and (shownum=$clickstoday or (showtype=1 and ($clickstoday%shownum=0))) AND 
(startdate<$today AND enddate>$daytime) OR (startdate=$today AND starttime<=$currenttime AND enddate>$daytime) limit 1");

if (mysql_num_rows($checkbonus) > 0) {
    DO SOMETHING
}

但我收到此错误:

Warning: mysql_num_rows() expects parameter 1 to be resource,
boolean given in...

任何帮助将不胜感激!

在这部分之前一切正常:

(startdate<$today AND enddate>$daytime) OR (startdate=$today AND starttime<=$currenttime AND enddate>$daytime) limit 1");

我已经检查过,它正在检查表中的正确行,并且我在查询之前定义了 $today、$daytime 和 $currenttime:

$today=date("Y-m-d");

$currenttime=date("H:i:s");

$daytime=date("Y-m-d H:i:s");
4

2 回答 2

2

原因是您的查询无效。所以它返回False一个布尔值,而不是一个结果集。

mysql_num_rows()不期望布尔值而是结果集,因此它发出警告。

检查是否所有 PHP 变量都被赋值或其中某个变量为空。

编辑:例如,如果$acctype为空,则查询变为

Select theurl from `vaultpromo` where (accid=0 or accid=) and (...
                                                    ^^^^^^

请确保每个变量都有一个值,检查以避免奇怪的情况...

于 2012-06-16T14:44:56.043 回答
0

你应该这样做:

$checkbonus = mysql_query("Select theurl from `vaultpromo` where (accid=0 or 
accid=$acctype) and (shownum=$clickstoday or (showtype=1 and                 
($clickstoday%shownum=0))) AND 
(startdate<$today AND enddate>$daytime) OR (startdate=$today AND 
starttime<=$currenttime AND enddate>$daytime) limit 1");


//Check resultset variable if it contain data or not.
if($checkBonus)
{
    if (mysql_num_rows($checkbonus) > 0) {
       //DO SOMETHING
    }
}
else
{
    die('Invalid query: ' . mysql_error());
}

您收到此错误“警告:mysql_num_rows() 期望参数 1 是资源,布尔值在...中给出”,因为变量$checkbonus 不包含数据库资源并且返回 False,因为您的查询确实运行成功。

您的查询很可能包含错误,因为多个变量之一为空或未转义,因此导致查询错误。

顺便说一句,我强烈建议您考虑使用PDO库。

于 2012-06-16T14:53:37.337 回答