我遇到错误。 我的日志如下:
PHP Warning: mysql_num_rows(): supplied argument is not
a valid MySQL result resource in
/home/domain/public_html/index.php on line 96
我的代码如下L第 96 行:
mysql_num_rows(mysql_query("SELECT * FROM `table` WHERE
UNIX_TIMESTAMP(`date`)>$user_last_visit"));
什么可能导致此错误?
你直接把两个函数放在一起:
mysql_num_rows(mysql_query(...));
从技术上讲,这是可以做到的(函数 1 返回成为函数 2 参数的东西),但是,如果函数 1 返回函数 2 无法处理的内容,则会出现错误。
这种情况发生在您的情况下。而是将返回值存储到变量中,并执行错误处理自己的错误:
$result = mysql_query(...);
if (!$result) {
throw new Exception(sprintf('Database query failed: %s', mysql_error()));
}
$num_rows = mysql_num_rows($result);
正确的错误处理对于可靠的编程至关重要,因此请注意返回值。如有疑问,请使用PHP手册仔细检查所讨论的功能,这确实是一个很好的资源。请参阅mysql_query
。
我会尝试重新排列代码
$sql = "SELECT * FROM `table` WHERE UNIX_TIMESTAMP(`date`) > $user_last_visit";
$result = mysql_query($sql) or die(mysql_error());
echo mysql_num_rows($result);
我无法从您的代码中分辨出来,但是您正在创建与mysql服务器的连接?
如果只想计算行数,请在查询中使用 COUNT(*)
关键字;否则,数据库将准备整个结果行以供输出,尽管您不需要它们。
SELECT COUNT(*)
FROM `table`
WHERE UNIX_TIMESTAMP(`date`) > $user_last_visit
然后,简单执行查询:
$result = mysql_query($query);
list($count) = mysql_fetch_array($result);
无论如何,您的查询会抛出错误;应该有另一个警告显示该错误。否则,您可以使用mysql_error()
找出错误。
>根据 http://php.net/manual/en/function.mysql-query.php mysql_query返回"对于选择,显示,描述,解释和其他返回结果集的语句,mysql_query()在成功时返回资源,或在错误时返回FALSE。
所以试着做
$query = "SELECT * FROM `table` WHERE UNIX_TIMESTAMP(`date`)>$user_last_visit"
$resource = mysql_query($query) or die("Error: ". mysql_error(). " with query ". $query);
mysql_num_rows($resource);
然后看看会发生什么。