Я пытаюсь заполнить таблицу HTML некоторыми данными SQL Server 2008 r2, контроллер (php_sqlsrv) работает нормально, таблицы заполнены очень хорошо, но когда я пытаюсь получить 2000 или более строк (возможно, меньше), происходит сбой и показывает это сообщение:
Ошибка SQL: 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 (). Иначе, сервер не поддерживает изменения конфигурации во время выполнения.