2012-10-16 66 views
0

問題,如果你的mysql_real_escape_string你的變量,它怎麼能和你一起工作SELECT SQL查詢。例如:Mysql真正的轉義字符串和SQL選擇

我的行有一列保存值's-Gravenmoer。現在,用戶輸入's-Gravenmoer,爲了安全起見,我將跳過此輸入值。但是,保留值's-Gravenmoer的 列的行永遠不會彈出,它會在單引號前加上 。如果有辦法做到這一點與mysql_real_escape_string

謝謝你們! Sander

+1

什麼意義呢?在stackoverflow上你有太多的答案。先看看Stackoverflow的教程信息:http://stackoverflow.com/tags/php/info或這個:http://php.net/language.types.string –

+0

所以實際上在數據庫中有斜槓?那麼就不要兩次逃脫。你可能想檢查(閱讀:禁用)你的magic_quotes設置:http://php.net/manual/en/security.magicquotes.php –

+2

http://net.tutsplus.com/tutorials/php/why-you-應該是使用phps-pdo的數據庫訪問/ * PDO *,並保存自己的一些頭痛,這是一個體面的教程。這是更安全的,你不必擔心你會在使用* mysql *函數級別的安全問題應該讓你擔心。 – Adam

回答

6

您誤解了爲SQL使用轉義數據的觀點。它不會永久修改數據。把它想象成禮物包裝紙。你正在向數據庫發送一些數據的禮物,並且你很好地包裝它(real_escape_string)。一旦它到達數據庫,數據庫服務器解包禮物(消除轉義)並將「禮物」放入其藏匿處。

任何時候您添加的反斜槓都不會出現在存儲的數據中,因爲數據庫服務器在進行實際插入時將其刪除。這些轉義純粹是爲了確保您插入查詢的任何數據都不會「破壞」SQL語句,例如

$name = "Miles O'Brien"; // <---note the ' 
$sql = "INSERT INTO people (names) VALUES ('$name')"; 

產生的SQL:

INSERT INTO people (names) VALUES ('Miles O'Brien') 
              ^--- oops, string terminated earlier, what's this "Brien" field/keyword? 

與real_escape_string,您的查詢看起來像

... VALUES ('Miles O\'Brien') 
        ^^---no longer an SQL string delimiter, treat it like any other char now. 
+0

我發現我的問題是系統增加了三個斜線感謝一個稱爲'魔術引號....'的輝煌功能。現在就開始工作,但謝謝你的回答! – user1555076