Я пытаюсь заполнить таблицу HTML некоторыми данными SQL Server 2008 r2, контроллер (php_sqlsrv) отлично работает, таблицы заполняются очень хорошо, но когда я пытаюсь получить 2000 или более строк (может быть, меньше), он сбой и это сообщение:
SQL Error: Array ([0] => Array ([0] => IMSSP [SQLSTATE] => IMSSP [1] => -59 [code] => -59 [2] => Предел памяти в 10240 КБ превышен для буферизованный запрос [сообщение] => Предел памяти в 10240 КБ превышен для буферизованного запроса))
Как я могу это исправить? Это проблема PHP или sqlsrv? Могу ли я исправить это из SQL Server Management Studio?
Измените настройку в php.ini.
Раздел: sqlsrv
Директива: sqlsrv.ClientBufferMaxKBSize.
добавьте две строки в php.ini
extension=php_pdo_sqlsrv_55_ts.dll extension=php_sqlsrv_55_ts.dll client_buffer_max_kb_size = '50240' sqlsrv.ClientBufferMaxKBSize = 50240
Вы также можете изменить настройки во время выполнения, если не требуется, чтобы производственный сервер изменил php.ini (проверьте, применимо ли это для вашего хостинга).
Обновите код следующими строками:
ini_set('memory_limit','256M'); // This also needs to be increased in some cases. Can be changed to a higher value as per need) ini_set('sqlsrv.ClientBufferMaxKBSize','524288'); // Setting to 512M ini_set('pdo_sqlsrv.client_buffer_max_kb_size','524288'); // Setting to 512M - for pdo_sqlsrv
Чтобы проверить, поддерживает ли ваш сервер это, попробуйте распечатать значения после установки выше.
echo ini_get('memory_limit'); echo ini_get('sqlsrv.ClientBufferMaxKBSize'); echo ini_get('pdo_sqlsrv.client_buffer_max_kb_size');
Новые значения должны быть теми, которые мы установили в ini_set (). Кроме того, сервер не поддерживает изменения конфигурации во время выполнения.