問題,如果你的mysql_real_escape_string你的變量,它怎麼能和你一起工作SELECT SQL查詢。例如:Mysql真正的轉義字符串和SQL選擇
我的行有一列保存值's-Gravenmoer
。現在,用戶輸入's-Gravenmoer
,爲了安全起見,我將跳過此輸入值。但是,保留值's-Gravenmoer
的 列的行永遠不會彈出,它會在單引號前加上 。如果有辦法做到這一點與mysql_real_escape_string?
謝謝你們! Sander
問題,如果你的mysql_real_escape_string你的變量,它怎麼能和你一起工作SELECT SQL查詢。例如:Mysql真正的轉義字符串和SQL選擇
我的行有一列保存值's-Gravenmoer
。現在,用戶輸入's-Gravenmoer
,爲了安全起見,我將跳過此輸入值。但是,保留值's-Gravenmoer
的 列的行永遠不會彈出,它會在單引號前加上 。如果有辦法做到這一點與mysql_real_escape_string?
謝謝你們! Sander
您誤解了爲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.
我發現我的問題是系統增加了三個斜線感謝一個稱爲'魔術引號....'的輝煌功能。現在就開始工作,但謝謝你的回答! – user1555076
什麼意義呢?在stackoverflow上你有太多的答案。先看看Stackoverflow的教程信息:http://stackoverflow.com/tags/php/info或這個:http://php.net/language.types.string –
所以實際上在數據庫中有斜槓?那麼就不要兩次逃脫。你可能想檢查(閱讀:禁用)你的magic_quotes設置:http://php.net/manual/en/security.magicquotes.php –
http://net.tutsplus.com/tutorials/php/why-you-應該是使用phps-pdo的數據庫訪問/ * PDO *,並保存自己的一些頭痛,這是一個體面的教程。這是更安全的,你不必擔心你會在使用* mysql *函數級別的安全問題應該讓你擔心。 – Adam