神秘错误:mysql_num_rows()期望参数1是资源

时间:2014-12-09 10:00:04

标签: php mysql

我遇到了以下问题。我的代码是这样的:

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password) 
  or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";
mysql_select_db($mysql_database,$dbhandle); 

$today = date('Y-m-d');
$queryfirst = "SELECT * FROM `database`.`sm2014` WHERE pvm='$today'";
echo $queryfirst;
$result = mysql_query("$queryfirst")|| die(mysql_error()); 


//fetch tha data from the database
if (!$result) {
    $message  = 'Invalid query: ' . mysql_error() . "\n";
    $message .= 'Whole query: ' . $queryfirst;
    die($message);
}
if($result === FALSE) {
    die(mysql_error()); // TODO: better error handling
}
$num_rows = mysql_num_rows($result);

我在页面上的输出是:

Connected to MySQL
SELECT * FROM `database`.`sm2014` WHERE pvm='2014-12-09'
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in            /*path*/2014/index.php on line 86

所以,我没有得到错误,我试图在PhpMyAdmin中通过php生成的复制粘贴运行的mysql查询,它完美无缺。我尝试了不同的查询:

SELECT * FROM `database`.`sm2014` WHERE pvm='2014-12-09'
SELECT * FROM `database`.`sm2014` WHERE pvm=2014-12-09
SELECT * FROM sm2014 WHERE pvm='2014-12-09'
SELECT * FROM `sm2014` WHERE pvm='2014-12-09'

并且它们的不同组合,仍然不起作用。 我试过把这个查询放入php页面:

$queryfirst = "SELECT * FROM `database`.`sm2014` WHERE pvm='2014-12-09'";

它也会出错。在数据库中,pvm是DATE类型。

4 个答案:

答案 0 :(得分:1)

我认为你的错误就在这里:

$result = mysql_query("$queryfirst")|| die(mysql_error()); 

尝试没有像这样的“”:

 $result = mysql_query($queryfirst) || die(mysql_error());

答案 1 :(得分:1)

您应该在此处使用运算符or而不是||

$result = mysql_query("$queryfirst")|| die(mysql_error());

这是因为运营商的优先权。 “||”优先级高于“=”,而“或”的优先级低于“=”。

所以当你这样做时

$r = exp1 || exp2;

它会像

一样

$r = ($exp1 || $exp2);

,结果将始终为布尔值。

当你这样做时

$r = exp1 or exp2;

它会像

一样

($r = $exp1) or $exp2;

答案 2 :(得分:0)

运行mysql查询时选择数据库连接:

$result = mysql_query($queryfirst,$dbhandle)|| die(mysql_error());

See example on PHP.net

答案 3 :(得分:0)

我不知道它是如何或为何发生的,但成员“Taalaibek M”是对的。错误在“或”运算符中,我使用“||”并且应该是“或”。我希望有声望的人可以为Taalaibek M.投票。 非常感谢你,关闭案件。