2009-12-07 55 views
2

我正嘗試使用php將.pdf文件上傳到mysql數據庫。PHP MYSQL文件內容轉義問題

這是除了文件的內容都很好。無論我如何設法逃避特殊字符,查詢總是失敗,主要是「未知命令\ n」。

我已經使用和addslashes,mysql_real_escape_string,removeslashes等

有沒有人對如何逃生文件內容有任何想法?

非常感謝,

+0

我認爲你必須顯示代碼和SQL這一個。 – 2009-12-07 18:40:39

回答

1

我用下面的序列之前,這似乎很好地工作,並且將所有數據存儲到數據庫,包括圖像,PDF,數據陣列,等... :)

存儲數據(可以是字符串,數組,對象等);

首先,將數據轉換base64編碼串

$strData = strtr(
      base64_encode(
       addslashes(
       gzcompress(serialize($dataToStore) , 9) 
       ) 
       ) , '+/=', '-_,'); 

然後存儲在分貝該字符串數據...


檢索所述數據;

從數據庫中提取字符串數據

解碼的數據恢復到你想要的東西(你可能需要這個依賴於輸入數據,陣列,圖像後執行額外的步驟等)

$returnData = unserialize(
       gzuncompress(
        stripslashes(
        base64_decode(
         strtr($strDataFromDb, '-_,', '+/=') 
        ) 
       ) 
       ) 
      ); 

這當然讓我來存儲我需要的東西在MySQL數據庫存儲!

+0

只是要清楚... [在閱讀了上面的內容之後,我意識到我的酒有點太多:)] 你想要存儲上述數據的db字段可以只是一個純文本字段,base64編碼將輸出轉換爲標準文本字符。 我不確定我在哪裏發現了這個代碼,所以我不能完全贊同它,但它確實是我所要求的...... – 2009-12-08 00:22:57

+0

我使用了這種技術和準備好的陳述技術的組合,創造奇蹟並解決我的問題!非常感謝! – Michael 2009-12-09 18:02:31

2

我不明白爲什麼你想存儲在數據庫中的文件,但我建議你看一看prepared statements

+1

+1同樣的事情爲mysqli:http://www.php.net/manual/en/mysqli.prepare.php – 2009-12-07 18:41:56

+0

謝謝,達人。好主意。 – Franz 2009-12-07 18:46:04

+0

這工作完美,非常感謝。 我存儲它在數據庫中的原因有幾個,不能執行,數據庫壓縮,數據庫備份使文件的備份等不知道這些是否只是開始使用MySQL的valids點。 非常感謝 – Michael 2009-12-07 19:02:12

0

猜一下,你可能會遇到錯誤,由於字符集之間的不兼容性。 PDF可能是一個二進制文件,所以你需要確保db列被設置來處理它。

+0

是的,我試過blob,大/大blob和二進制。逃避似乎是問題所在。 – Michael 2009-12-07 19:03:47

0

旁邊如果(MySQL的)系統變量max_allowed_packet被設置爲「小」的價值,你可能會遇到「包過大」的錯誤逃避問題。
使用mysqli擴展,準備好的語句和mysqli_stmt::send_long_data可以避免這兩個問題。

+0

我將不得不考慮這一點,希望它被限制在小文件中,這不應該發生。我總是可以將它設置爲更大的數據包。 – Michael 2009-12-07 19:03:06