2012-08-30 43 views
1

當我在本地MAMP設置中使用mysql_real_escape_string時,它工作正常。當我在文本字段中輸入「test」時出現「test」。mysql_real_escape在本地但不是遠程工作

當我將它發佈到遠程服務器時,它似乎沒有逃避字符串。 「測試」在數據庫中顯示爲「測試」。

我已經確認在轉義之前打開了一個連接。

示例代碼:

global $db,$db_table_prefix; 

    mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error()); 
    mysql_select_db("test") or die(mysql_error()); 

    $title = mysql_real_escape_string($_POST['title']); 
    $content = mysql_real_escape_string($_POST['content']); 

它節省精細到正確的數據庫並沒有什麼,但似乎並不被添加\'s。

+3

它應該出現在DB「測試」中,\是轉義輸入,並且不保存。聽起來像本地版本是錯誤的。 – 2012-08-30 20:16:42

+0

你確定,設置了正確的編碼嗎?另外,這就是應該出現在數據庫中的,不是嗎?它'通過''測試',但寫''測試''。 – ATaylor

+0

它可能無助於回答你的問題,但你應該停止使用'mysql_ *'函數。他們正在被棄用。請使用[PDO](http://php.net/manual/en/book.pdo.php)(自PHP 5.1起支持)或[mysqli](http://php.net/manual/en/book)。 mysqli.php)(自PHP 4.1起支持)。如果您不確定要使用哪一個,請閱讀本文(http://www.deprecatedphp.com/mysql_/)。 – Matt

回答

3

magic_quotes可能在您的本地服務器上啓用。你需要禁用它們。

更多關於禁用magic_quoteshttp://www.php.net/manual/en/security.magicquotes.disabling.php

+0

如果我在本地禁用它們,這意味着它們仍然不能在遠程服務器上工作? –

+0

@TheTechBox這是關於服務器配置。由於現在已被棄用,建議禁用它們。您可以在您的網站上使用「禁用運行時的魔術引號」部分,這將取消magic_quotes的效果(儘管最好在配置中禁用它們) – Manhim

+0

我可能會丟失一些東西,但是如果服務器在我逃脫時添加了引號字符串?它目前不在遠程服務器上,但在本地。 –

4

這不是m_r_e_s的事,而是magic_quotes
您的本地計算機已啓用它們。你的遙控器沒有。你應該在本地禁用它們。

此外,你真的應該開始使用mysqliPDO

+3

不要簡單地使用'mysqli'或'PDO',使用**準備查詢**。 – Brad

+1

我總是會忘記magic_quotes,他們只是爲了讓每個人都存在而瘋狂。 – 2012-08-30 20:18:43

+0

@Brad,真正的數據 – simshaun

相關問題