2009-08-17 24 views
2

在我的代碼我使用addslashes轉義某些字符時,將它們插入到數據庫中,當我發送一些信息時,我使用stripslashes刪除這些斜線,情況是stripslashes功能刪除所有斜線,所以如果我需要發送任何反斜線的字符串也會被刪除。我如何保留那些所需的斜槓。跳轉使用斜線,然後使用stripslashes PHP

任何幫助將不勝感激。

+1

**不要**使用'addslashes()',這是很多努力,但甚至不工作。查看Chacha102或iandc76的答案。 – 2009-08-17 06:39:51

回答

8

您可能想嘗試使用mysql_real_escape_string。您不必非要使用它,並且它對數據庫的使用是安全的。

更重要的是,使用prepared statements

+0

感謝您的投入,在代碼廣泛使用addslashes的情況下,必須保持與MSSQL和MYSQL的兼容性,mysql_real_escape_string仍然可以工作嗎?我認爲它會,因爲它是PHP的功能,只是想確認。也建議使用str_replace(「\\」,「\」,stripslashes($ string))等編碼函數。請指教。 – pks83 2009-08-17 07:09:01

+0

我會看看準備好的陳述。因爲如果你把準備好的陳述放進去,你會得到同樣的東西。意思是說,如果你不想立即重做整個系統,它不會破壞你當前的一些東西。如果您使用PDO庫來準備語句,您將與任何數據庫兼容。 – 2009-08-17 14:46:55

-3

我認爲這是更好地使用htmlspecialchars轉義數據進行數據庫存儲。從數據庫獲取數據後,您不必擔心恢復它們,因爲它們將被瀏覽器正確處理。

+1

唯一的問題是,當你真的想要像HTML標籤這樣的東西被保留下來,就像在窗體或博客上一樣,你必須記住取消編碼它們。 – 2009-08-17 06:29:00

+1

這可以防止錯誤的HTML,並應在輸出爲HTML時完成。它不能防止SQL注入,這是將數據放入數據庫時​​的危險。 – Quentin 2009-08-17 06:46:02

+0

仍然看起來像一個更好的主意,然後使用'addslashes'和'stripslashes'。 – RaYell 2009-08-17 06:46:31

3

您可以嘗試在插入到數據庫時使用PDO準備的語句,因此您無需擔心會轉義任何內容。

2

在我的代碼我使用和addslashes而將它們插入到數據庫逃避某些字符,當我發送一些信息出來我用stripslashes,以消除那些斜線......

你做它錯了。將其嵌入查詢中時,必須轉義字符串。 你做而不是從數據庫中回來的數據。沒有刪除的斜線。它們只存在於查詢中 - 不在數據庫中。

除此之外,綁定參數/準備語句好得多,正如本主題中其他人已經提到的。