警告:mysql_num_rows():提供的参数不是有效的MySQL结果资源

时间:2011-08-18 08:40:36

标签: php mysql

  

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

我遇到了这个mysql代码的问题。我认为它是$ sqlx ...行中的一个基本错误,但我有点迷失。

代码基本上打印来自db的消息 这是代码:

$sqls="SELECT username FROM social WHERE `adder`='$username'";
$results=mysql_query($sqls);
$resulti= mysql_num_rows($results);
if ($resulti==0) {
echo "You haven't added anyone yet. Find some <a   href=\"/social/suggestions\">suggestions</a>";
}
$row=mysql_fetch_array($results);

$sqlx="SELECT * FROM messages WHERE `sender` IN ($row)";
$resultx= mysql_query($sqlx); 
$resultz= mysql_num_rows($resultx);
if ($resultz==0){
echo "No messages at all!!";
}
else {
$finished="false";
$r=0;
While(($rowx=mysql_fetch_assoc($resultx))&&($finished=="false")) {
//echo off messages

$ username进一步提升了文件。

这是错误:

警告:mysql_num_rows():提供的参数不是第34行/home/user/public_html/social/iframe/index.php中的有效MySQL结果资源

第34行是$resultz= mysql_num_rows($resultx); 但就像我说的那样,错误可能就是第二行。

有趣的事情发生了。 “根本没有消息!!”被呼出,这意味着mysql_query的结果为0.这就是为什么我确信它是第32行,($sqlx

任何想法??

获取mysql_fetch_array时我是否完成了$row错误? 感谢

3 个答案:

答案 0 :(得分:3)

mysql_query($sqlx)返回false而不是结果。这意味着发生任何错误。尝试检查是$sqlx正确的查询并检查mysql_error()以获取发生的错误。要检查是否有任何错误,您可以使用

if(!$resultx){
     print 'error:'.mysql_error();
}
else{
    //use result
}

答案 1 :(得分:3)

$row=mysql_fetch_array($results);

$sqlx="SELECT * FROM messages WHERE `sender` IN ($row)";

这将创建以下查询:

SELECT * FROM messages WHERE `sender` IN (Array)

这显然不是一个有效的MySQL查询。你必须处理数组。

$sqlx = "SELECT * FROM `messages` WHERE `sender` IN ("; // start of query

foreach($row as $r)
    $sqlx .= "'".$r['username']."',"; // insert all returned usernames

$sqlx = substr($sqlx,0,-1).')'; // substract the last comma and close the query

或者,正如RiaD在评论中指出的那样:

$sqlx = "SELECT * FROM `messages` WHERE `sender` IN (".
        implode(',',array_map(function($x){return "'".$x['username']."'"; }, $row)).
        ")";

PS:Riad,它应该是$x['username']而不是$x而你忘记了分号;)

答案 2 :(得分:0)

如果您的查询失败,mysql_query($sqlx)将返回false而不是resource。因此,您需要检查此函数是否返回true(例如if (!results) {})nad print use mysql_error()以查看错误。

if(!$resultx){
   print 'error:'.mysql_error();
}

此外,您正在将$row变量嵌入查询字符串中。但是这个var是Array,所以你最终会得到这样的查询:

SELECT * FROM messages WHERE `sender` IN (Array)

有关详细信息,请参阅mysql_fetch_array手册