2012-02-28 125 views
0

在分配數據庫中的信息之前,我使用了mysql_real_escape_string(),但是當我想要顯示數據庫中的數據時,'將被替換爲\'。 那麼我該如何擺脫這個反斜槓?有沒有可以顛倒mysql_real_escape_string()的函數?擺脫反斜槓

+3

'mysql_real_escape_string()'不反斜槓加入到最終的數據。必須有其他的事情,比如雙重逃跑或魔術引號 – 2012-02-28 12:52:02

+0

對。嘗試在php.ini或[此片段]中禁用魔術引號(http://www.php.net/manual/en/security.magicquotes.disabling.php)。如果這不起作用並且需要快速修復,可以使用'stripslashes'。 – 2012-02-28 12:52:47

+1

我想你已經啓用了magic_quotes_gpc功能 - 將其關閉。順便說一句,您應該使用[PDO](http://php.net/manual/en/book.pdo.php)作爲數據庫訪問層而不是'mysql _ *()'函數。 – Crozin 2012-02-28 12:54:07

回答

2
  1. 沒有[內置]功能逆轉mysql_real_escape_string。
  2. 如果你只有引號但沒有換行符被轉義 - 這不是mysql_real_escape_string的責任。
  3. 而不是剝離,你顯然不得不讓你的代碼不加它們
  4. 有2個可能的原因斜線出現:
    • magic_quotes_gpc被打開。 Just turn it off.
    • 一些額外的數據清理功能負責。擺脫它。
  5. 只是爲了確保:沒有任何「信息」,但只有(引號括起來的查詢部分)必須進行轉義。對於其他任何的查詢部分逃逸是無用的,you have to find another way to protect them from SQL injection
2

您應該關閉magic_quotes,但mysql_real_escape_string不會在數據庫中添加任何僅用於轉義字符串的反斜槓。

但是你可以使用stripslashes()將其刪除,但更優雅的解決方案是offmagic_quotes

+0

'mysql_real_escape_string'不會添加斜線,它們只是被MySQL刪除。問題是'mysql_real_escape_string'是斜槓(大概來自魔術引號),斜線越多越好。 – 2012-02-28 12:56:33

+0

@Daniel:是的,這只是逃避字符串,並沒有存儲在數據庫中 – 2012-02-28 12:58:36