MySql數據庫-查詢、插入數據時轉義函數的使用
最近在看一部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數據庫-查詢、插入數據時轉義函數的使用