0

我正在使用 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 源代码的残余和之前返回的结果。

4

1 回答 1

0

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

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

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

我的 php.ini 设置为 4096 - 不知道我是如何从中获得 4104 字节的。

于 2013-07-08T22:46:25.737 回答