2009-09-30 2 views
3

Вот моя сделка: у меня есть сайт, на котором работает PHP 5 (5.2.5) на сервере Windows, который говорит с базой данных MSSQL 2005 для своих данных. Я обращаюсь к базе данных, используя последнюю версию ADODB. У меня есть таблица с уникальным идентификатором и текстовым полем. Все это работает хорошо и хорошо, пока текстовое поле не достигнет определенного размера (пока не удалось определить точную точку отсечения)PHP и MSSQL - извлечение текстового поля

Проблема возникает, когда я пытаюсь получить строку из базы данных, которая примерно равна 5 миллион символов длинный. Это извлечение отлично работает, если я делаю это через студию управления SQL и возвращает все данные.

SQL-сервер не возвращает сообщение об ошибке, когда запрос выполняется через PHP, но он не возвращает никаких реальных данных.

Я играл с обычными подозреваемыми, как повысит mssql.textlimit и TextSize параметры конфигурации, как так:

ini_set("mssql.textlimit",2147483647); 
ini_set("mssql.textsize",2147483647); 

Я также попытался не посылать запрос на «установить TextSize 2147483647» с не изменение.

Если я возьму подстроку данных, я теоретически мог бы объединить все это вместе, но подстрока возвращает varchar, который ограничен до 8000 символов, и как таковой потребуется что-то вроде 875 запросов, чтобы получить полную сумму, которая на самом деле не является отличная идея.

У кого-нибудь есть идеи? +

+0

ли ADODB усечения ответ? Это проблема, которую вы пытаетесь преодолеть? – Neel

ответ

0

PHP ini имеет пару переменных, которые вы хотите посмотреть: max_execution_time и memory_limit - это два.

расширение:

Я не использую ADODB, но я иметь дело с превышением больших записей и наборы записей. PHP может либо тайм-аут во время выполнения (если запрос сложный), либо он может захлестнуть размер результата. Иногда вы получаете сообщение об ошибке, иногда - нет. Возможно, ADODB маскирует эти ошибки от пользователя - я не знаю. Самый простой способ узнать, если это так, - это запустить запрос через PHP, используя mssql_query() вместо рамки. Если это не мешает, ADODB является проблемой. Если это так, напишите php.ini.

+0

Я не думаю, что решает проблему в вопросе. Проблема заключается в том, что ADODB усекает ответ. Здесь может быть полезно некоторое разъяснение. – Neel

0

Вы пытались установить поле в базе данных в BLOB? или двоичный? Возможно, было бы лучше обработать его почти как файл, если он так долго.

Вы также можете ознакомиться с такими системами хранения ключей, как Voldemort или Amazon's Dynamo, если у вас будет много таких файлов. Реляционные базы данных не обрабатывают такие большие куски данных, которые хорошо. Да, вы упоминали, что инструмент администрирования хорошо справляется с этим, но будет ли он масштабироваться?

1

Hy это может быть вариантом для вас max_allowed_packet
EDIT:

' 
mysql> SET max_allowed_packet = 2147483647; 
mysql> SELECT id, comment FROM table 
    -> ORDER BY comment; 
' 
That should work 
+0

Также посмотрите на этом сайте http://cvs.moodle.org/moodle/lib/adodb/adodb-perf.inc.php?view=co – streetparade

Смежные вопросы