对于大型nvarchar,PHP ODBC_FETCH_INTO返回null

时间:2013-07-08 21:23:26

标签: php odbc

我正在使用PHP在SQLServer 2008中存储数据。

数据类型为nVarChar(Max)。

非常大的字符串发布并正确保存,但是当我在odbc_fetch_into时,超过4104个字符的值会在数组中放置一个空值。

我可以选择left([Note],4104)并返回左边的4101个字符,但是当我选择left([Note],4105)时,它会将null放入数组中。

我需要对PHP数组做些什么来让它接受更大的值吗? 或者可能单独获取字段?

$SQL = "SELECT left([Note],4104) FROM [myTable] WHERE [myKey] = myVariable"; //Works for all strings!
//$SQL = "SELECT [Note] FROM [myTable] WHERE [myKey] = myVariable"; //Works for strings <= 4104 characters

$row = array();
$stuff = array();

$prep = odbc_prepare($conn, $SQL);
$ret = @odbc_execute($prep);

while (odbc_fetch_into($prep,$row)) {
    array_push($stuff,$row);
}

echo json_encode($stuff);

更新:我刚刚在$ stuff上做了一个var_dump,并且发现它在字符#4104之后有很多垃圾。在Firefox中,有许多菱形/问号字符,以及PHP源代码的残余和之前返回的结果。

1 个答案:

答案 0 :(得分:0)

好的,无论如何我都有部分答案......

PHP.ini中有一个名为odbc.defaultlrl的参数。该值将限制odbc字段的返回大小。

还不确定为什么最后所有的gabage都在那里。当我将字段值从nvarchar(max)更改为varchar(max)或文本时,垃圾消失了但是大小限制仍然存在。

我的php.ini设置为4096 - 不确定我是如何获得4104字节的。