標籤:客戶 sla strip sql錯誤 使用 使用者名稱 案例 資料庫 escape
最近在看一部php的基礎視頻教程,在做案例的時,當通過使用者名稱查詢使用者資訊的時候,先使用了轉義函數對客戶提交的內容進行過濾之後再交給sql語句進行後續的操作。雖然能看到轉義函數本身的作用,但是仍然有一些疑惑。
疑惑一:當轉義資料後,資料中會增加一些反斜線,為了能尋找出對應的資料,那麼原來存在資料庫中的資料是不是也已經被儲存成含有反斜線的了?
疑惑二:轉義資料後再向資料庫中插入資料,儲存在資料庫中的資料是否會含有過濾後的反斜線?
帶著這些疑問對使用者提交的表單進行測試。
echo get_magic_quotes_gpc(); // 擷取當前 magic_quotes_gpc的配置選項設定,如果開啟了就會返回1,否則返回0
$title = $_POST[‘title‘];
$sql = insert into news(`title`) values(‘". $title ."‘);
如果不適用mysql_real_escape_string()轉義函數,當接收的資料中包含單引號時就會引起sql錯誤。
$title = mysql_real_escape_string($_POST[‘title‘]);
轉義過後再進行插入資料就不會出現上面的問題,而且插入到資料庫中的資料和輸入時的一樣,不會帶有轉義時增加的反斜線。
當查詢資料時,也是按照輸入時的內容與資料庫進行比較,也能查詢出相應的結果。
由此推論,mysql_real_escape_string()轉義函數只在sql語句執行的過程中起到保護作用,並不會對結果產生影響。
將過濾函數貼出來。
1 function check_input($value) 2 { 3 // 去除斜杠 4 if (get_magic_quotes_gpc()) 5 { 6 $value = stripslashes($value); 7 } 8 // 如果不是數字則加引號 9 if (!is_numeric($value))10 {11 $value = mysql_real_escape_string($value);12 }13 return $value;14 }
以上是自己的理解,與大家分享,如果有誤還請大家批評指正。
MySql資料庫-查詢、插入資料時轉義函數的使用