Возможный дубликат:
Предупреждение: 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."')";