可能重复:
Warning: mysql_fetch_* expects parameter 1 to be resource, boolean given error
$query="select * from fsb_profile where fsb_profile.profile_id=('select fsb_friendlist.friendlist_friendid from fsb_friendlist where friendlist_memberid='".$id."'')";
$sql=mysql_query($query);
while ($t = mysql_fetch_assoc($sql))
{
echo "hai";
echo $t["profile_name"];
}
此代码未运行原因?
错误: -
警告:mysql_fetch_assoc():提供 参数不是有效的MySQL结果 资源 D:\ Project \ fsbaroda \ profile.php on 第186行
答案 0 :(得分:2)
我想在那里缺少IN
子句,在子查询中也不需要单引号:
$query="select * from fsb_profile where fsb_profile.profile_id IN
(select fsb_friendlist.friendlist_friendid from fsb_friendlist
where friendlist_memberid='".$id."')";
或者试试这个:
$query="select * from fsb_profile where fsb_profile.profile_id =
(select fsb_friendlist.friendlist_friendid from fsb_friendlist
where friendlist_memberid='".$id."')";
还要确保查询成功附加mysql_error()
:
$sql=mysql_query($query) or die(mysql_error());
答案 1 :(得分:1)
mysql_query
仅返回可用资源。如果查询失败,则返回FALSE
。在将mysql_query
传递给mysql_fetch_assoc
之前,您需要检查$query = "select * from fsb_profile " .
"where fsb_profile.profile_id=(" .
"select fsb_friendlist.friendlist_friendid " .
"from fsb_friendlist " .
"where friendlist_memberid=" . $id .
" LIMIT 1)";
返回的值。
在这种特殊情况下,您的SQL查询包含不需要的引号。它应该是:
SELECT
第二个friendlist_memberid
语句不需要引号,如果$id
是数字,则SELECT
周围也不需要引号。
更新您的内部IN
查询返回多行,因此您需要在=
中使用WHERE
而不是LIMIT
子句,或者,如此处所示,使用$query = "select * from fsb_profile " .
"where fsb_profile.profile_id=(" .
"select fsb_friendlist.friendlist_friendid " .
"from fsb_friendlist " .
"where friendlist_memberid=" . $id .
" LIMIT 1)";
if( $sql = mysql_query($query) ) {
while ($t = mysql_fetch_assoc($sql)) {
echo "hai";
echo $t["profile_name"];
}
} else {
echo "Something went horribly wrong:\n" .
mysql_error();
}
来确保只返回一行。
因此,您的代码应该更像这样:
{{1}}
还有其他值得一提的:您应该考虑使用prepared statements而不是动态SQL命令。它通常是一个更安全的替代方案,并且比你必须要做的所有令人讨厌的逃避更简单。有很多教程。以下是帮助您入门的一对:Prepared Statements in PHP and MySQLi和Developing MySQL Database Applications With PHP。
答案 2 :(得分:0)
我猜你有查询语法错误。
答案 3 :(得分:0)
您的查询抛出错误并返回false
而不是返回有效的结果资源。
您的查询失败的原因是因为您的子查询周围有一个额外的单引号'
,这些都不是必需的。
$query="select * from fsb_profile
where fsb_profile.profile_id= (
select fsb_friendlist.friendlist_friendid from fsb_friendlist
where friendlist_memberid='".$id."')";
答案 4 :(得分:0)
您有MySQL语法错误,或者该查询返回0结果。在这种情况下,$sql
为NULL
(或false
)。尝试使用phpMyAdmin调试您的查询。
答案 5 :(得分:0)
首先总是测试mysql_query的结果。运行这个让我知道
$query="select * from fsb_profile where fsb_profile.profile_id=('select fsb_friendlist.friendlist_friendid from fsb_friendlist where friendlist_memberid='".$id."'')";
echo $query;
$sql=mysql_query($query);
if ($sql)
{
while ($t = mysql_fetch_assoc($sql))
{
echo "hai";
echo $t["profile_name"];
}
} else
{
echo mysql_error();
}