可能重复:
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
错误?
感谢
答案 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
手册