的字符串我寫了一個腳本在我的數據庫中插入記錄。我得到的唯一問題是,當我嘗試存儲包含'
字符的數據時,腳本不起作用,並且它不在數據庫中存儲任何內容。例如John's Birthday
,Amy's Home
等。對於這個問題的任何解決方案,允許像'
這樣的特殊字符存儲在數據庫中並檢索它們而不會對安全造成任何損害?無法插入包含'
mysqli_query($con,"INSERT INTO Story (desc)
VALUES ('$mytext')");
的字符串我寫了一個腳本在我的數據庫中插入記錄。我得到的唯一問題是,當我嘗試存儲包含'
字符的數據時,腳本不起作用,並且它不在數據庫中存儲任何內容。例如John's Birthday
,Amy's Home
等。對於這個問題的任何解決方案,允許像'
這樣的特殊字符存儲在數據庫中並檢索它們而不會對安全造成任何損害?無法插入包含'
mysqli_query($con,"INSERT INTO Story (desc)
VALUES ('$mytext')");
PHP的mysqli_real_escape_string
是專門爲此目的而製作的。你的問題是,引號被MySQL解釋爲查詢的一部分而不是值。你需要像這樣轉義字符,這樣它們不會影響你的查詢 - 這是SQL注入的內容。
$mytext = mysqli_real_escape_string($con, $mytext);
// continue with your query
嗯有趣的手段,如果我使用'mysqli_real_escape_string($ con,$ mytext);'那麼我不能成爲SQL注入的受害者?或類似的 – user3027531
不是,但它是一個開始。有關更多信息,請參閱手冊:http://php.net/manual/en/security.database.sql-injection.php –
通過mysqli_real_escape_string
過濾查詢的變量部分。
@KA_lin使用PDO是不是一個解決方案,和'和addslashes()'是粗修復沒有被字符集意識到,不像'mysqli_real_escape_string()',這是。 – 2013-11-25 00:14:58
@MikeW如果我使用mysqli_real_escape_string($ con,$ mytext);那麼我不能成爲SQL注入的受害者?或類似的。也檢索它們不會對安全造成任何損害嗎? – user3027531
'mysqli_real_escape_string()'是專門爲此提供的。如果您使用它正確地轉義輸入,則您不可能成爲SQL注入攻擊的受害者。我不會說'從不',因爲即使您正在逃跑或使用準備好的語句,二級注射攻擊有時也是可能的。這取決於你的代碼在別處。 – 2013-11-25 00:32:26