2009-09-30 97 views
3

這裏是我的交易:我有一個網站在Windows服務器上運行PHP 5(特別是5.2.5),這是與MSSQL 2005數據庫交談的數據。我正在使用最新版本的ADODB框架訪問數據庫。我有一個帶有唯一標識和文本字段的表格。這一切都運作良好,直到文本字段達到一定的大小(尚未能夠確定確切的截止點)PHP和MSSQL - 大文本字段檢索

問題出現時,我試圖從數據庫中檢索一個字符串,大致是5百萬字符長。如果我通過SQL Management Studio執行並返回所有數據,此檢索工作正常。

當查詢通過PHP運行時,SQL服務器不返回任何錯誤消息,但它不返回任何實際數據。

我已經與通常的嫌疑人玩耍了,像加大了mssql.textlimit和TEXTSIZE配置選項,如下所示:

ini_set("mssql.textlimit",2147483647); 
ini_set("mssql.textsize",2147483647); 

我也試着發送「設置TEXTSIZE 2147483647」查詢無更改。

如果我將數據的子字符串理論上拼湊在一起,但子字符串會返回一個限制爲8000個字符的varchar,因此需要類似875個查詢來獲得全部數量,而這並不是真的一個好主意。

有人有什麼想法嗎? +

+0

是ADODB截斷迴應?這是你想要克服的問題嗎? – Neel 2009-10-01 11:37:30

回答

0

PHP ini有幾個變量,你會想看看:max_execution_timememory_limit是兩個。

擴展:

我不使用ADODB,但我不處理超過大型記錄和記錄集。 PHP可以在執行期間超時(如果查詢很困難),或者可能會扼殺結果的大小。有時候你會得到一個錯誤信息,有時候卻不會。 ADODB可能會掩蓋用戶的這些錯誤 - 我不知道。查找這種情況的最簡單方法是使用mssql_query()而不是框架通過PHP運行查詢。如果沒有解決,ADODB就是問題所在。如果是這樣,請使用php.ini來操作。

+0

我不認爲這解決了問題中的問題。問題似乎是ADODB正在截斷響應。這裏的一些說明可能會有用。 – Neel 2009-10-01 11:36:57

0

您是否嘗試將數據庫中的字段設置爲BLOB?或二進制?如果它很長,最好把它看作一個文件。

如果你有很多像這樣的文件,你可能還想看看像Voldemort或亞馬遜的Dynamo這樣的Key-Value存儲系統。關係數據庫不能很好地處理這麼大的數據塊。是的,你提到管理工具可以很好地處理它,但它會擴展嗎?

1

海蘭這可能是你max_allowed_packet
編輯選項:

' 
mysql> SET max_allowed_packet = 2147483647; 
mysql> SELECT id, comment FROM table 
    -> ORDER BY comment; 
' 
That should work 
+0

也看看這個網站 http://cvs.moodle.org/moodle/lib/adodb/adodb-perf.inc.php?view=co – streetparade 2009-10-05 20:06:13