Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с многократным mysql_fetch_array, Приходится делать запрос снова 
V
    Опции темы
Addmin
  Дата 14.12.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 3.2.2006
Где: сослан в Сибирь

Репутация: нет
Всего: 15



Здравствуйте!

Вот такая проблема. Мне в двух разных местах страницы нужно сделать вывод из одного и того же запроса. Делаю так:

Код

$query = "SELECT * FROM table WHERE id=1"
$result = mysql_query($query);

while ($row = mysql_fetch_array($result))
{
    echo $result['first'];
}

//Здесь идет какой-то HTML...

while($row = mysql_fetch_array($result))
{
    echo $result['second'];
}


Вывод второго параметра не происходит! Программа вообще не входит во второй цикл while. 

Но если сделаю вот так (то есть ещё раз сделаю запрос к базе):

Код

$query = "SELECT * FROM table WHERE id=1"
$result = mysql_query($query);

while ($row = mysql_fetch_array($result))
{
    echo $result['first'];
}

//Здесь идет какой-то HTML...

$query = "SELECT * FROM table WHERE id=1"
$result = mysql_query($query);

while($row = mysql_fetch_array($result))
{
    echo $result['second'];
}


Все работает, как положено. Из-за чего такое? Я подумал, что помочь может функция reset(), но куда её не вставь - пишет, что её параметр "плохой" и массивом вовсе не является.

Пожалуйста, подскажите, как быть в такой ситуации?


--------------------
PM MAIL   Вверх
bars80080
Дата 14.12.2010, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



Цитата(Addmin @  14.12.2010,  18:38 Найти цитируемый пост)
Программа вообще не входит во второй цикл while. 

ясен пень, ты ж уже сделал выборку. это как чтение файла: читаешь сначала по строчке в цикле функцией fgets, дочитываешь до конца, и всё EOF (конец файла). для повторного выбора - надо перевести указатель в начало

как переводить указатель в начало mysql - не скажу, просто не знаю. а не знаю, потому что это не нужно, ибо можно было прекрасно все данные из запроса ещё при первой выборке занести в массив, и во втором случае прокручивать уже этот массив
PM MAIL WWW   Вверх
Addmin
Дата 14.12.2010, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 3.2.2006
Где: сослан в Сибирь

Репутация: нет
Всего: 15



Цитата

как переводить указатель в начало mysql - не скажу, просто не знаю. а не знаю, потому что это не нужно, ибо можно было прекрасно все данные из запроса ещё при первой выборке занести в массив, и во втором случае прокручивать уже этот массив 

Объясни, пожалуйста, как при первой выборке заносить в массив? smile Я не понял и попробовал просто сделать ещё один массив $result_2, которому присвоил массив $result.

 То есть так: $result_2 = $result; 

Безрезультатно, массив пуст.

Цитата

ясен пень, ты ж уже сделал выборку. это как чтение файла: читаешь сначала по строчке в цикле функцией fgets, дочитываешь до конца, и всё EOF (конец файла). для повторного выбора - надо перевести указатель в начало

Я же работаю с массивом, а не с mysql, по логике (как мне представляется логичным) я мог просто сделать reset на "прокрученный" массив и получить точно такой же, какой и был в начале. Или что-то здесь совсем не так? Или MySQL'евский массив - просто значения из выборки, а никакой не настоящий массив?


--------------------
PM MAIL   Вверх
skyboy
Дата 14.12.2010, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(bars80080 @  14.12.2010,  19:08 Найти цитируемый пост)
как переводить указатель в начало mysql - не скажу

mysql_data_seek
Цитата(bars80080 @  14.12.2010,  19:08 Найти цитируемый пост)
ибо можно было прекрасно все данные из запроса ещё при первой выборке занести в массив, и во втором случае прокручивать уже этот массив 

полностью согласен.
PM MAIL   Вверх
Addmin
Дата 14.12.2010, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 3.2.2006
Где: сослан в Сибирь

Репутация: нет
Всего: 15



mysql_data_seek($result,0)  - возвернет ваш массив взад smile

Спасибо за информацию о MySQL'евских массивах!

Добавлено через 50 секунд
Цитата

полностью согласен. 


А как, как занести данные из выборки в массив?

Добавлено через 3 минуты и 27 секунд
И чем хуже просто вернуть указатель в выборке данных в начало?

Добавлено через 3 минуты и 47 секунд
Вопрос ещё для меня  не решился smile


--------------------
PM MAIL   Вверх
bars80080
Дата 14.12.2010, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



Цитата(Addmin @  14.12.2010,  19:19 Найти цитируемый пост)
$result_2 = $result; 

в $result нету никаких массивов, там ресурс запроса. это как $fp в $fp = fopen();

Код

$query = "SELECT * FROM table WHERE id=1"
$result = mysql_query($query);

$ar = array();

while ($row = mysql_fetch_array($result))
{
    echo $result['first']; $ar[] = $row;
}


Добавлено через 1 минуту и 9 секунд
Цитата(Addmin @  14.12.2010,  19:24 Найти цитируемый пост)
И чем хуже просто вернуть указатель в выборке данных в начало?

дополнительная работа с другим сервером - mysql. а так массив данных уже у тебя в памяти быстрого доступа
PM MAIL WWW   Вверх
Addmin
Дата 14.12.2010, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 3.2.2006
Где: сослан в Сибирь

Репутация: нет
Всего: 15



Ага... Большое спасибо!


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.