警告:mysql_num_rows()

时间:2011-11-30 17:07:15

标签: php

  

可能重复:
  Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result

我收到此错误:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/valerie2/public_html/elinkswap/snorris/filename.php on line 89

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/valerie2/public_html/elinkswap/snorris/filename.php on line 90

以下是它所讨论的代码行:

dbConnect();
    $SQL="SELECT fileID FROM uploads WHERE fileName='".$result."'";
    //echo $SQL;
    $rs=mysql_query($SQL);
    echo mysql_num_rows($rs);    // line 89
    if(mysql_num_rows($rs)!=0){  // line 90
        $extension=strrchr($result,'.');
        $result=str_replace($extension,time(),$result);
        $result=$result.$extension;
    }
    return $result;
}

有人可以向我解释为什么我一直收到这个错误吗?

4 个答案:

答案 0 :(得分:2)

这是因为您的mysql_query由于SQL命令中的语法或执行错误而失败。

确保您可以在phpMyAdmin或您拥有的任何工具中执行您的SQL查询(使用echo $SQL;行获得的查询)。

每当mysql_query失败时,它返回False而不是mysql资源。因此,您应该始终检查if (!$rs)或使用or die(...)机制。

答案 1 :(得分:1)

您的查询失败,因此$rs包含布尔false,这将导致该错误。您需要执行以下操作:

dbConnect();

$query = "SELECT fileID
          FROM uploads
          WHERE fileName='".mysql_real_escape_string($result)."'
          LIMIT 1";
// Added LIMIT 1 for speed - you are only checking if the record exists, so you
// can stop as soon as you find one.

if (!$rs = mysql_query($query)) {
  // Handle query error here
  // e.g.
  echo "Oh no! The query failed! Error: ".mysql_error();
  // BUT you should NEVER show the result of mysql_error() in a production environment!
}

if (mysql_num_rows($rs)) { // This is sufficient for detecting whether there were any results
  // A better way of doing what you did:
  $result = explode('.',$result);
  array_splice($result,-1,0,time());
  $result = implode('.',$result);
  // This is better, because str_replace() will replace ALL occurrences of the
  // extension - this way only inserts the timestamp before the extension and
  // doesn't ever do anything else
}

return $result;

答案 2 :(得分:1)

虽然这里报告错误:

echo mysql_num_rows($rs);

错误的原因在于:

$SQL="SELECT fileID FROM uploads WHERE fileName='".$result."'";
//echo $SQL;
$rs=mysql_query($SQL);

可能的候选人是:

  1. $ result包含导致SQL格式错误的未转义引号 - 而且您的代码也容易受到SQL注入攻击

  2. 在此代码执行之前,您没有调用mysql_connect()

  3. 在此代码执行之前,您没有选择数据库(并且未在查询中限定表名)。

  4. 您当前的数据库中没有名为uploads的表,或者此表不包含名为fileID或fileName的列

  5. 如果你取消注释'echo $ SQL;',问题1应该是证据,如果在调用mysql_query()之后检查mysql_error(),问题2,3和4会很明显;

答案 3 :(得分:0)

您应该看到mysql_error()说的内容,将其放在mysql_query之后;

mysql_query($SQL) or die(mysql_error());

这会产生错误,这就是为什么你的代码不会比查询函数更进一步,从而使你的num_rows无效。