多个和/或条款让我感到难过

时间:2012-06-16 14:38:47

标签: php mysql

这是我到目前为止所做的:

$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");

2 个答案:

答案 0 :(得分:2)

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

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

检查所有PHP变量是否已被估值或其中某些变量是否为空。

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

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

请确保每个变量都有一个值,检查以避免出现异常情况......

答案 1 :(得分: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());
}

$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为资源,在...中给出布尔值”,因为变量不包含数据库资源且返回False,因为您的查询确实成功运行。

您的查询很可能包含错误,因为其中一个或多个变量为空或未转义,从而导致查询出错。

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