mysql_query проблем ?

13 отговора 569 прегледа
#1

mysql_query проблем ?

Здравейте !
Имам една заяка към база данни на mysql :
select * from table1 ;
Заявката връща 6 хиляди реда. Когато я изпълня под DOS прозорец с mysql клиента всичко е наред. Когато използвам php функцията mysql_query, забива. Ако променя заявката така :
select * from table1 where column1='5' ;
при което се връщат около десетина реда, заявката работи !
Използвам php 5.0.4 и mysql 4.1.11 под Windows XP.
Ще съм благодарен на тези, които могат да помогнат !

Отговор
в отговор на Питaщ #2

Re: mysql_query проблем ?

Мисля, че 6000 реда препълват разрешената памет.
Направи си цикъл и вади по 20-30 реда
Ще е по-бавно, но ще свършиш работа.

Успех

И най-ярките личности си плащат тока.
Отговор
в отговор на edembg #3

Re: mysql_query проблем ?

А от къде се задава големината на тази памет ? Натройки на php или на mysql трябва да направя ? А защо тази заявка работи под command prompt и mysql клиента и не дава съобщение за грешка ...

Отговор
в отговор на Питaщ #4

Re: mysql_query проблем ?

Виж как сам си си отговорил...

щом върви през командния ред значи проблема е в пхп настройките.

трябва да видиш в пхп ини коя е опцията за размер на резултати или евентуално на променливи изобщо.

Мисля че трябва да промениш memory_limit, но имайки предвид че при мен настройката по подразбиране е 8МБ, ако на теб ти трябват повече от това за да изпълниш един скрипт и искаш да бърникаш по ИНИ-то, т.е. вероятно е за лична употреба скрипта... идва въпросът дали изобщо ПХП като език е подходящ за тая работа.

все пак аз бих се придържал към съвета който вече получи

разцепи заявката на на блокове от по 100 примерно и я изпълнявай целия алгоритъм итеративно със съответните лимит-и докато не ти върне празен резултат, така ще се отървеш от проблема

Редактирано от id на

Отговор
в отговор на id #5

Re: mysql_query проблем ?

Според мен трябва да се замислиш дали изобщо ти трябва бази данни....защото заявки от рода на
SELECT * не говорят добре....
Най-добре си прегледай дизайна на базата данни.

Отговор
в отговор на Питaщ #6

Re: mysql_query проблем ?

Не е сигурно, че проблемът ти е в паметта.

Напиши какво го правиш резултата от тази заявка след това?

И какво горе-долу съдържа дадената таблица или изглед?

Everything louder than everything else...

Редактирано от Dakota на

Отговор
в отговор на Dakota #7

Re: mysql_query проблем ?

Изкарвам съдържанието в табличен вид, като генерирам html страница.

Отговор
в отговор на Питaщ #8

забива ти ...

браузера а не php-to

да се опитам ли да позная че си с ИЕ

на 6000 реда ще трябва да го почакаш доста докато ти рендне табличката ;-)

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #9

Re: забива ти ...

Наистина пробвам с IE. Но освен него пробвах и на FireFox и Opera. Все същото. Затова използвах следното :
SELECT col1,col2,col3 FROM table1 LIMIT limit_number ;
и започнах да намалявам limit_number. Оказа се, че задам ли стойност по-голяма от 150 - забива. До 150 включително си работи ???

Отговор
в отговор на Питaщ #10

Re: забива ти ...

кой знае как си си форматирал таблицата и какво се опитва да направи браузера ти .....

по принцип ако не върне резултат до 30 сек. би трябвало php-то да умре на грешка....


я направи следното :
изтегли си страницата с някакъв download manager (flashget, getright, wget, ...) и ако тогава не стане (не се save-не голям html) кажи и ще мислим следващото (препълване на резулт буфери в mysql клиент/сървър)

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #11

Re: забива ти ...

Когато са до 150 реда, с FlashGet записва файл 16К. Когато са по-вече, не се записва нищо. Файлът, дори не започва да се записва. Следователно проблема не е в браузъра.

Отговор
в отговор на Питaщ #12

Re: забива ти ...

Много интересен казус
сега ще ти искам всички настройки на системата :
Версия на апачито, версия на PHP-то, версия на MySQL сървер и клиент

настройки на php, mysql server, mysql client.

направи целия дъмп на настройките и ги сложи някъде да ги четем

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на Питaщ #13

Re: mysql_query проблем ?

6000 реда не са нищо. Нещо не правиш както трябва. Постни сорса на скрипта с който изпращаш заявките.

Отговор
в отговор на Питaщ #14

Re: забива ти ...

Пробвай да сложиш за първи ред в скрипта ти:

set_time_limit(300);

И кажи има ли разлика в броя на редовете, за които забива.

Everything louder than everything else...
Отговор