php查询没有运行?

时间:2010-07-09 07:18:10

标签: php mysql

  

可能重复:
  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行

6 个答案:

答案 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 MySQLiDeveloping 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结果。在这种情况下,$sqlNULL(或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();
   }