2010-08-12 127 views
2

我已經閱讀了許多關於SQL注入的內容。但它不適用於此代碼:爲什麼我的mysql_real_escape_string不起作用?

$inputform= $_GET["password"]; 
$query = "INSERT INTO user(password) VALUES ('".mysql_real_escape_string($inputform)."')"; 

例如我使用此示例:O'Conner。當我提交它並查看我的表時,有O'Connor而不是O\'Conner

謝謝

回答

7

報價被轉義,以便MySQL不會將其解釋爲字符串分隔符。反斜槓不會存儲在數據庫中,也不應該存在。你所看到的是正確的,預期的和記錄的行爲。

最好的解決方案,BTW,是使用PDO和參數化查詢。

+0

+1還提到參數化查詢(['mysqli :: prepare'](http://ch2.php.net/manual/en/mysqli.prepare.php)) – 2010-08-12 12:07:48

1

mysql_real_escape_string()轉義值,使得MySQL的SQL語法分析器可以解釋正確時,它存儲的值,它不是實際存儲在數據庫中的轉義字符串

1

如果您在得到O'Connor值的表,它工作正常。但試試echo $query,你會看到轉義的結果。

1

它工作得很好!數據庫中不應該有「O \ Conner」,只是在查詢中。如果它不起作用,你的查詢將不會成功,因爲在O'Conner中會破壞你的查詢。

1

當您查看錶格時,它應該是O'Connor - 這意味着該字符串已在SQL中正確轉義。如果它沒有被mysql_real_escape_string轉義,那麼你可能最終會遇到語法錯誤。

查詢竟又爲:

INSERT INTO user(password) VALUES ('O'Connor) 

如果你想在DB的反斜槓,請嘗試使用addslashes你把它傳遞給mysql_real_escape_string之前,但你可能不知道。