Mysql num行返回0

时间:2014-01-25 14:41:12

标签: php mysql

我从数据库中提取线程,

$getthreads = mysql_query("SELECT * from threads WHERE subcat=" . $thread . "") or die(mysql_error());
while ($threads = mysql_fetch_array($getthreads)) {
if (mysql_num_rows($threads) > 0) {

警告:mysql_num_rows()要求参数1为资源,第30行的C:\ xampp \ htdocs \ views \ threads.php中给出的数组

但是db中的东西有正确的信息,这里是我的$ threads var:

$thread = isset($_GET['thread']) ? $system->escape($_GET['thread']) : null;

为什么它应该给我这个错误呢?

4 个答案:

答案 0 :(得分:1)

$Query = "SELECT * from threads WHERE subcat='".mysql_real_escape_string($thread)."'";
$getthreads = mysql_query($Query) or die(mysql_error());

if (mysql_num_rows($getthreads) > 0) {

mysql_num_rows参数:正在评估的结果资源。这个结果来自对mysql_query()的调用。

PS使用mysqli或pdo,不推荐使用mysql

答案 1 :(得分:0)

我的猜测是subcat是一个字符串变量。如果是这样,这可能会有效:

SELECT * from threads WHERE subcat='" . $thread . "'"

接下来是mysql_命令已过时的强制性声明。

接下来,代码容易受到SQL注入攻击。您应该学习如何使用参数。

答案 2 :(得分:0)

首先,您使用带有错误参数的mysql_num_rows。纠正它,

   if(mysql_num_rows($getthreads) > 0) {

    }

但是,实际上你不需要这样做。在从查询中获取任何行之前,循环不会运行。如果您的查询错误,我猜您可能会遇到问题。因为,我看到你正在为$thread分配空值,而且似乎你想在数据库中检查null。您不应该将null=运营商匹配。即使在大多数情况下它似乎没问题,但它可能表现得非常糟糕。你必须使用

  ... WHERE  subcat is NULL") ...

匹配数据库中的null值。这样,您必须更改代码的逻辑以测试null。我猜,它可能就像

   ... WHERE subcat = '". mysql_real_escape_string($thread).'" OR is NULL) ...

如果,我正确使用此代码实现您的目标。

答案 3 :(得分:-1)

试试这个,添加了'" . mysql_real_escape_string($thread) . "'

mysql_real_escape_string - 转义字符串中的特殊字符以用于SQL语句

$getthreads = mysql_query("SELECT * from threads WHERE subcat='" . mysql_real_escape_string($thread) . "' ") or die(mysql_error());

if (mysql_num_rows($getthreads) > 0) {
     while ($threads = mysql_fetch_array($getthreads)) {
         ....
     }
}