Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: В чем же глючит mysql_fetch_array  (Прочитано 19278 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« : 20-01-2008 14:25 » 

столкнулся вот с какой странностью. есть у меня участок кода:

Цитата
$tmp = mysql_fetch_array(mysql_query("SELECT `type` FROM `user_band_forum` WHERE `forum_id`='{$forum_val['id']}' AND (SELECT COUNT (`id_band`) FROM `user_band_id` WHERE `id_band`=`band_id` AND `id_user`='{$GLOBALS["user_param"]['id']}')>0 ORDER BY `type` DESC"),1);

как дело доходит до него - выдает:
Цитата
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

пробовал в phpMySQL выполнять запрос - он там выполняеться и выдает правильный результат, но в php не хочет Жаль
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 20-01-2008 16:04 » 

WHERE `id_band`=`band_id` ?
Я не думаю, что у тебя band_id равно band_id.
« Последнее редактирование: 20-01-2008 16:13 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 20-01-2008 16:11 » 

Код:
$result = mysql_query("SELECT `type` FROM `user_band_forum` WHERE `forum_id`='{$forum_val['id']}' AND (SELECT COUNT (`id_band`) FROM `user_band_id` WHERE `id_band`=`band_id` AND `id_user`='{$GLOBALS["user_param"]['id']}')>0 ORDER BY `type` DESC");

  while ($row = mysql_fetch_array($result, 1)) {
        printf ("Type: %s  ", $row[0]); 
    }
что даст?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 21-01-2008 08:07 » 

Цитата
WHERE `id_band`=`band_id` ?
Я не думаю, что у тебя band_id равно band_id.
А почему ты так не думаешь... Улыбаюсь в том то и дело, что логика запросса вот какая:
В таблице `user_band_forum` выбрать все поля `tupe`, если в этом же ряду forum_id = тому-то и в таблице user_band_id присутвует хотя бы один ряд поле которого id_band равно band_id (из первой таблицы) и id_user равен томуто...

Если запрос который я неверху написал выполнять в phpMySQL - то все работает как я и хочу, то есть ИМХО логика запросса построенна верно (уж если не с точки зрения скорости работы, то хоть с точки зрения выдачи)
Записан
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 21-01-2008 08:12 » 

Цитата
$result = mysql_query("SELECT `type` FROM `user_band_forum` WHERE `forum_id`='{$forum_val['id']}' AND (SELECT COUNT (`id_band`) FROM `user_band_id` WHERE `id_band`=`band_id` AND `id_user`='{$GLOBALS["user_param"]['id']}')>0 ORDER BY `type` DESC");

  while ($row = mysql_fetch_array($result, 1)) {
        printf ("Type: %s  ", $row[0]); 
    }

Примерно так пробовал уже - не работает... Улыбаюсь

ps: а твой пример вроде как и не должен работать, вроде как ключь 1 в mysql_fetch_array создаем массив у которого ключи названия ячеек... то есть $row[0] не будет существовать, будет $row['type'] - но все равно - ни ворк Жаль
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 21-01-2008 11:46 » 

Попробуй в Славином примере, сначало проверить, вернулся false или нет? Чтобы определить, виноват сам запрос или дальнейшие действия над ним. И если вернулось true, тогда с помошью mysql_num_rows() проверь, вообше сколько строчек вернулось в запросе.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 21-01-2008 12:00 » 

возвращает ложь.... но ведь в phpMySQL то работает... специально узнавал у администрации сервера на котором хостимся, они ответили - что версия PHP везде одинаковая.... Просто таки сумасшествие какое то...

ладно.. наверное надо искать другие способы... Жаль
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 21-01-2008 12:12 » 

так возможно все проще
$query ="SELECT `type` FROM `user_band_forum` WHERE `forum_id`='". $forum_val['id'] ."' AND (SELECT COUNT (`id_band`) FROM `user_band_id` WHERE `id_band`=`band_id` AND `id_user`='".$GLOBALS[user_param][id]."')>0 ORDER BY `type` DESC";

т.е. разделить мух от котлет - строки запроса и переменные
« Последнее редактирование: 21-01-2008 12:16 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #8 : 21-01-2008 12:12 » 

mysql_error() что пишет после ошибочного запроса?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 21-01-2008 12:56 » 

возвращает FUNCTION forum_my_dom_biz.COUNT does not exist

еще мне посоветовали попользоваться вместо библиотеки mysql библиотекой mysqli (аргументировали тем, что именно ее функции используються в phpMySQL) - результат оказался тот же...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 21-01-2008 13:05 » 

еще раз

создаешь строку запроса

$query ="select * From table where id=" . $ID . " and Pid=". $Pid;
echo $query;

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dracul
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 21-01-2008 13:20 » 

возвращает
Цитата
select * From table where id= and Pid=
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 21-01-2008 13:22 » 

$query ="SELECT `type` FROM `user_band_forum` WHERE `forum_id`='". $forum_val[id]
echo $query;
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 22-01-2008 08:58 » 

1. "Глючит" не выборка, а запрос.
2. Не ясно, выполнил ли ты подключение к базе и проверил успешность. Текущую базу выбрал?
3. Убери "`" - это фишки phpmyadmin-а, а для SQL это не нужно.
4.
Цитата
$tmp = mysql_fetch_array(mysql_query("SELECT ....
Никогда так не пиши! Пожалей свое время и силы - пиши длиннее:
Код: (PHP)
$query = "SELECT .....";
$res = mysql_query($query);
if (!$res) /* ошибка */
{
    die('DB ERROR: ' . mysql_error());
}
$row = mysql_fetch_assoc($res);
И обрати внимание на последнюю строку - лучше явно использовать mysql_fetch_row() или mysql_fetch_assoc(), чем mysql_fetch_array() без указания второго аргумента: история помнит случай смены дефолтного значения!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chuda
Гость
« Ответ #14 : 23-01-2008 23:45 » 

4.
Цитата
$tmp = mysql_fetch_array(mysql_query("SELECT ....
Никогда так не пиши!
ну почему же? Можно, если в запрос добавить «limit 1»

И обрати внимание на последнюю строку - лучше явно использовать mysql_fetch_row() или mysql_fetch_assoc(), чем mysql_fetch_array() без указания второго аргумента: история помнит случай смены дефолтного значения!
А вот за это спасибо! Ведь действительно так.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines