可能重复:
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;
}
有人可以向我解释为什么我一直收到这个错误吗?
答案 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);
可能的候选人是:
$ result包含导致SQL格式错误的未转义引号 - 而且您的代码也容易受到SQL注入攻击
在此代码执行之前,您没有调用mysql_connect()
在此代码执行之前,您没有选择数据库(并且未在查询中限定表名)。
您当前的数据库中没有名为uploads的表,或者此表不包含名为fileID或fileName的列
如果你取消注释'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无效。