2013-03-22 30 views
0

爲了提高安全性,我實現了一個執行預準備語句的函數。當使用PHP準備好的語句和mysqli時,緩慢檢索blob字段

但是當我嘗試獲取base64編碼的blob內容(大約30-50KB)時,我遇到了問題。

如果我不使用預處理語句運行查詢,它會很快運行。

通過準備好的聲明,它在撥打電話時停止播放:mysqli_stmt_fetch($statement) 並且需要將近一分鐘或更長時間才能運行,最終返回結果。

只要我擺脫mysqli_stmt_fetch($statement)調用或從我的select查詢中排除blob字段,事情就像往常一樣快速運行。

我希望有人知道這裏發生了什麼。到目前爲止,我已經挖掘了互聯網尋找答案,但運氣不大。

+0

聽起來像司機給我的錯誤。但首先是什麼?也許你也可以提供兩個不同查詢的完整代碼($ statement)。 – baloo 2013-03-22 21:25:07

+0

該應用使用api調用,該調用返回沒有模式的數據。無模式數據填充到一個blob中。 – 2013-03-22 21:35:42

回答

1

我會將二進制blob保存在MySQL以外的其他內容中,在MySQL中保留一個簡單的標識符,以便我知道該如何取回它。 MySQL不會是存儲大塊二進制數據的首選方式。
至少它會解決你的問題,你應該嘗試拋棄base64的開銷(這也增加了33%的大小)。

我想嘗試的另一個解決方案是查看是否有更新版本的驅動程序或服務器。或者嘗試使用不同的驅動程序,如PDO

第三種解決方案是嘗試將字段類型從BLOB更改爲TEXT,base64位於正常ascii範圍內。

+0

我現在只是排除了斑點。但是很可能會再次遇到這個問題,所以我將不得不看到測試不同的驅動程序來看看會發生什麼。我的部門中的許多程序員在MySQL中拋出了很多像這樣的值(我知道這是一個糟糕的做法),因爲他們無法訪問像HDFS或其他高可用性數據存儲的中央文件存儲。所以,唉,我們現在已經陷入了一個角落。 – 2013-03-30 06:49:25