2013-07-08 53 views
0

我正在使用PHP在SQLServer 2008中存儲數據。PHP ODBC_FETCH_INTO對於大型nvarchar返回null

數據類型是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); 

更新:我只是做了$東東的var_dump和來找出它有後字符#4104大量的垃圾。在Firefox中,大量鑽石/問號字符以及PHP源代碼的殘留和以前返回的結果。

+0

另一個更新:odbc_fetch_row和odbc_result一起產生相同的錯誤。 – alfadog67

回答

0

好吧,我有無論如何了部分答案...

有一個名爲odbc.defaultlrl在php.ini中的參數。該值將限制odbc字段的返回大小。

還不確定爲什麼所有的棉布在最後。當我將字段值從nvarchar(max)更改爲varchar(max)或文本時,垃圾消失,但大小限制仍然存在。

我的php.ini被設置爲4096 - 不知道我是如何獲得4104個字節的。