2015-06-30 30 views
1

我正在使用mysqli_real_escape_string轉義單引號和雙引號等,但它不是逃避任何東西。我的代碼如下mysqli_real_escape_string不能轉義任何

$con = mysqli_connect("ip","db","pw","db"); 
$formtext = $_POST['formtext']; 
$formtext = mysqli_real_escape_string($con, $formtext); 
mysqli_query($con, "INSERT into table (formtext) VALUES ('$formtext')") 
    or die(); 

插入表格後,'formtext'字段不包含轉義符(反斜槓)。 發生這種情況的可能原因是什麼?

+1

什麼是您的輸入和插入輸出? –

+2

你的意思是「沒有逃脫」,你可以顯示數據嗎? – user1844933

+1

爲什麼不使用預準備語句? http://php.net/manual/en/mysqli.quickstart.prepared-statements.php – chris85

回答

2

保存到數據庫的數據將含有「逃脫」或轉義序列或外來的斜線。

數據庫包含實際數據提供,這是功能點:逃離輸入用作SQL語句SQL字符串內容

mysqli_real_escape_string逃脫在使用的字符串特殊字符在SQL語句中 [作爲字符串字面內容],考慮到連接的當前字符集。


如果點是變化數據(如果有的話,是對變化應該是什麼確切) - 指出,「real_escape」或(更好)parameterized queries應該仍然是無論如何使用 - 然後使用適當的功能的任務。

+0

所以爲了簡化你的答案,在上面的代碼中說mysqli_real_escape_string工作正常,並且不應該有反斜槓?我會研究參數化的查詢(在mysqli出來之前,在插入之前不需要轉義字符串) – KevinGulling

+1

@KevinGulling是的,那是正確的。轉義字符串*,因爲它在SQL語法*中,它不會(也不應該)更改插入的值。它只是確保它是vali d SQL字符串內容並緩解SQL注入。 – user2864740

相關問題