0

我遇到一个错误。我的日志如下:

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

什么可能导致此错误?

4

4 回答 4

0

我会尝试重新排列代码

$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 服务器的连接?

于 2012-04-15T21:44:45.607 回答
0

如果您只想计算行数,请COUNT(*)在查询中使用关键字;否则,尽管您不需要它们,但数据库将为输出准备整个结果行。

SELECT COUNT(*)
FROM `table`
WHERE UNIX_TIMESTAMP(`date`) > $user_last_visit

然后,简单地执行查询:

$result = mysql_query($query);
list($count) = mysql_fetch_array($result);

无论如何,您的查询会引发错误;应该有另一个警告显示错误。否则,您可以使用mysql_error()来找出错误。

于 2012-04-15T21:46:06.980 回答
0

根据http://php.net/manual/en/function.mysql-query.php mysql_query 返回“对于 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回结果集的语句,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);

然后看看会发生什么。

于 2012-04-15T21:47:39.887 回答
0

你直接把两个函数放在一起:

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

于 2012-04-15T21:49:14.487 回答