Ограничения на длину SQL-запроса...

LeRatO

Новичок
Ограничения на длину SQL-запроса...

Доброе время суток!

Вторую неделю бьюсь с проблемой - никак не избавлюсь....
В скрипте формируется SQL-запрос INSERT. Стандартный, без заморочек:

PHP:
$query = "INSERT INTO $DB_tabl (`log_id_user`, 	
                                                       `log_id_razd`,      
                                                       `log_date_zaprosa`, 
                                                       `log_time_zaprosa`,        
                                                       `log_kakoi_razdel`,
                                                       `log_shapka_tabl`, 
                                                       `log_nomer_tabl_razdel`,
                                                       `log_vibranie_pok`,
                                                       `log_poluchil_tabl`,
                                                       `log_kol_chisel`,
                                                       `log_summa_tabl`, 
                                                       `log_oplatil`,
                                                       `log_menu_id`) 
		VALUES ('$log_id_user',
                                                        '$n_por', 
                                                        ".date ("Ymd").",
                                                        ".date ("His").",
                                                        '$log_kakoi_razdel',
                                                        '$log_shapka_tabl',
                                                        '$log_nomer_tabl_razdel',
                                                        '$log_vibranie_pok',
                                                        '".$log_tabl."',
                                                        '$log_kol_chisel',
                                                        '$log_summa_tabl',
                                                        '$log_oplatil',
                                                        '$log_menu_id'); 
";
В таблице есть поле log_poluchil_tabl BLOB размером 16777215. Когда в это поле загоняется небольшой кусок сериализованного массива, все нормально. Но стоит попытаться занять поле целиком (все 16777215 символов), скрипт вылетает с ошибкой MySQL server has gone away .

В менеджере MySQL запрос выполняет без ошибок... за 6 секунд. А из скрипта никак.

В процессе отладки выяснила, что линк не теряется и wait_timeout не причем (по умолчанию стоит аж 8 часов).

Тогда в чем дело?
Может есть ограничение по длине SQL-запроса? И мои самое большее 20Мб запроса вываливают за этот предел?
 

LeRatO

Новичок
Обязательно посмотрю.
Кажется, последняя ссылка не совсем по моей теме... речь о запросе, а не загрузке файлов.
 

LeRatO

Новичок
$log_tabl - это фрагмент строки сериализрованного массива. Формируется элементарным substr из строки бооольшого размера.
А это имеет какое-то значение для запроса?

-~{}~ 11.01.06 22:23:

Автор оригинала: alpine

Еще посмотрите на значения переменных:

post_max_size
max_execution_time
max_input_time

[/url]
Простите, а при чем тут первый параметр? Переменные не передаются POST-методом.
Да, согласна, второй и третий могут повлиять, но...
max_execution_time итак стоит 0 - без ограничений...
 

alpine

Новичок
LeRatO
Простите, но я не знаю в чем у вас _КОНКРЕТНО_ проблема и что _КОНКРЕТНО_ вам нужно смотреть и делать чтобы ее решить. Я всего лишь сделал предположение, возможно ошибочное. Вам следует еще раз проверить значение переменной выполнив в скрипте запрос
[sql]
SHOW VARIABLES LIKE 'max_allowed_packet';
[/sql]
и поискать вашу проблему в списке багов на сайте mysql.com. И возможно обновить версию mySQL.
Также вы можете воспользоваться известными поисковыми системами, например google.com, и поискать похожую проблему введя запрос "MySQL server has gone away".
Желаю удачи.
 

LeRatO

Новичок
Спасибо, что предлагаете варианты.

Но увы все это испробовано max_allowed_packet=25M. Запрос не выходит за границы 17Мегов... Так что дело не в этом.

По тексту ошибки искала практически везде. Разве что в баги не лазела...

Надеюсь, что причину найду и исправлю. На худой конец свалю проблему на другого разработчика (хотя вариант похож на капитуляцию).
 

Апельсин

Оранжевое создание
эта переменная должна быть установлена как для сервера так и для клиента.
 

Labutin

Новичок
Автор оригинала: Апельсин
эта переменная должна быть установлена как для сервера так и для клиента.
А можно про это подробней?

Что я имею:
PHP Version 4.4.0
MySQL - 4.1.14-nt
max allowed packet 838,859,776
в принципе запросы длиной больше 16 метров должны проходить. Но все равно не работает :(
SQL-запрос:

SELECT *
FROM `vsm_attachments`
LIMIT 0 , 30

Ответ MySQL:

#2020 - Got packet bigger than 'max_allowed_packet'
Но файл там 100% меньше 30 метров. А значение max allowed packet 838,859,776

В доках написано, что для версии MySQL меньше 4 max allowed packet было максимум 16М Но ведь у меня 4.1.14 !
Есть подозрение, что виновал клиент/библиотека php
В phpinfo написано:
Client API version 3.23.49
Как побороть проблему? Пятый php не предлагать.

P.S. memory_limit = 300M;
 
Сверху