SQL Server 2008 返回“缓冲查询超出 10240 KB 的内存限制”


SQL Server 2008 returns "Memory limit of 10240 KB exceeded for buffered query"

我正在尝试用一些SQL Server 2008 r2数据填充HTML表,控制器(php_sqlsrv)工作正常,表填充得很好,但是当我尝试检索2000或更多行(可能更少)时,它崩溃并显示以下消息:

SQL 错误: 数组 ( [0] => 数组 ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -59 [代码] => -59 [2] => 缓冲查询超出 10240 KB 的内存

限制 [消息] => 缓冲查询超出 10240 KB 的内存限制))

我该如何解决这个问题?这是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() 中设置的值。否则,服务器不支持运行时配置更改。