
文章插圖
當(dāng)使用php向數(shù)據(jù)庫中寫入或者讀取數(shù)據(jù)時,若在進(jìn)行操作前對字符串進(jìn)行一些處理,如:過濾處理,可能會導(dǎo)致某些數(shù)據(jù)庫語句因為特殊的字符引起的污染而出現(xiàn)致命的錯誤 。為此,php中提供了一個“魔法開關(guān)”—–magic_quotes_gpc 。(該開關(guān)已在5.4.0版本被刪除,始終置為off)
當(dāng)magic_quotes_gpc = on時,從外部post、get、cooki過來的數(shù)據(jù)都會在預(yù)定義字符之前添加”\“ 。
比如:
程序中var_dump($_GET[‘id’]);
輸出的結(jié)果為:
string(3) “1\’”
預(yù)定義的字符為:
單引號(‘) 雙引號(”) 反斜杠(\) NULL
當(dāng)magic_quotes_gpc=off時,寫入數(shù)據(jù)庫的字符串未經(jīng)過任何過濾處理,從數(shù)據(jù)庫中讀出的字符串也未作任何處理 。如何這樣設(shè)置這個開關(guān),并且沒有其他對字符串進(jìn)行處理的操作,那么可能會給數(shù)據(jù)庫的讀寫帶來問題,例如:
將數(shù)據(jù):$data = https://www.520longzhigu.com/diannao/“insert_data’”to_mysal”;(data和to之間是一個單引號,一個雙引號)
若將字符串$data寫入數(shù)據(jù)庫中,則會出現(xiàn)sql語句錯誤,寫入數(shù)據(jù)失敗 。
那么如果不使用這個“開關(guān)”就沒有辦法解決這個問題了嗎?答案是否定的 。
我們可以使用以下方法:
使用addslashes() 函數(shù)
函數(shù)原型:
string addslashes ( string $str )
參數(shù):要轉(zhuǎn)義的字符串
返回值:返回轉(zhuǎn)義后的字符串
作用:將要轉(zhuǎn)義的字符串中的預(yù)定義字符轉(zhuǎn)義,即在預(yù)定義字符前面加上反斜杠 。
php中還有一個函數(shù)能轉(zhuǎn)義sql語句中使用的字符串中特殊的字符,該函數(shù)的原型如下:
string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier = NULL ] )
本函數(shù)將 unescaped_string 中的特殊字符轉(zhuǎn)義,并計及連接的當(dāng)前字符集,因此可以安全用于 mysql_query() 。
現(xiàn)在向數(shù)據(jù)庫中插入數(shù)據(jù)的可能會引起sql語句被污染的問題已經(jīng)解決了,可是如果現(xiàn)在想要把剛才添加到數(shù)據(jù)庫中的元素讀取出來的話,會發(fā)現(xiàn)讀出的數(shù)據(jù)中每個預(yù)定義的字符前面都多了一個反斜杠,這時反斜杠并不是我們想要的,那么有沒有辦法將每個預(yù)定義字符前面的反斜杠去掉呢?
php中也提供了具有該功能的函數(shù):
函數(shù)原型為:
string stripslashes ( string $str );
函數(shù)返回值:返回一個去掉轉(zhuǎn)義反斜杠的字符串,即去掉addslashes()函數(shù)添加的字符串 。
另外tp中自定義了一個函數(shù):
function stripslashes_deep($value)
{
$value = https://www.520longzhigu.com/diannao/is_array($value) ? array_map(‘stripslashes_deep’, $value) : stripslashes($value);
return $value;
}
這個函數(shù)也能去除預(yù)定義字符前的反斜杠 。
現(xiàn)在還有一個問題:在訪問服務(wù)器之前,我們并不知道“魔法開關(guān)”的狀態(tài)是打開還是關(guān)閉,如果已經(jīng)處于打開狀態(tài),再使用addslashes()函數(shù)進(jìn)行轉(zhuǎn)義,就會使預(yù)定義前面有兩個反斜杠,從而使的寫入數(shù)據(jù)庫的數(shù)據(jù)發(fā)生改變 。
解決辦法:
可以使用函數(shù)get_magic_quotes_gpc()進(jìn)行檢驗“魔法開關(guān)”是否打開 。
$data = https://www.520longzhigu.com/diannao/get_magic_quotes_gpc() ? $data : addslashes($data);
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 增強(qiáng)手部力量可做二頭肌舉健手
- 男性健身如何增加肌肉和提高力量
- 家用前置過濾器增減壓原理
- 增肌 牛奶豆奶誰更佳?
- 德國斷骨增高費(fèi)用 斷骨增高多少錢
- 健身:引體向上幫你增強(qiáng)肌力
- 水管批發(fā):通過這些Bose黑色星期五特賣增加折扣
- 增肌健身最常見的五大誤區(qū)
- 瑜伽是什么? 瑜伽竟有增強(qiáng)心肺功能
- 手指追蹤增強(qiáng)學(xué)習(xí)蒙臺梭利使用100年實踐的證據(jù)
