Запрос php не запущен?

Возможный дубликат:
Предупреждение: mysql_fetch_ * ожидает, что параметр 1 будет ресурсом, boolean заданной ошибкой

$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 в строке 186

Вам не хватает предложения 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()); 

mysql_query возвращает только полезный ресурс, если запрос выполняется успешно. Если запрос завершается с ошибкой, он возвращает FALSE . Вам нужно проверить значение, возвращаемое mysql_query прежде чем передать его в mysql_fetch_assoc .

В этом конкретном случае ваш SQL-запрос содержит кавычки, которые не требуются. Должен быть:

 $query = "select * from fsb_profile " . "where fsb_profile.profile_id=(" . "select fsb_friendlist.friendlist_friendid " . "from fsb_friendlist " . "where friendlist_memberid=" . $id . " LIMIT 1)"; 

Нет необходимости в котировках вокруг вашего второго 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(); } 

Что-то еще стоит упомянуть: вы должны изучить использование подготовленных операторов вместо динамических команд SQL. Это часто более безопасная альтернатива и проще, чем все неприятные побеги, которые вы должны сделать в противном случае. Вокруг много учебников. Вот пара, с которой вы начали: Подготовленные утверждения в PHP и MySQLi и разработка приложений баз данных MySQL с помощью PHP .

Я собираюсь предположить, что у вас есть синтаксическая ошибка запроса.

У вас либо есть синтаксическая ошибка MySQL, либо запрос возвращает 0 результатов. $sql в этом случае – NULL (или false ). Попробуйте отладить ваш запрос в чем-то вроде phpMyAdmin.

сначала всегда проверяйте результат из 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(); } 

Ваш запрос выдает ошибку и возвращает false а не возвращает действительный ресурс результата.

Причина, по которой ваш запрос терпит неудачу, заключается в том, что у вас есть дополнительные одинарные кавычки ' обернутые вокруг вашего подзапроса, они не нужны.

 $query="select * from fsb_profile where fsb_profile.profile_id= ( select fsb_friendlist.friendlist_friendid from fsb_friendlist where friendlist_memberid='".$id."')";