<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • php操作數據庫的步驟(php增刪改查mysql實例)


    當使用php數據庫中寫入或者讀取數據時,若在進行操作前對字符串進行一些處理,如:過濾處理,可能會導致某些數據庫語句因為特殊的字符引起的污染而出現致命的錯誤。為此,php中提供了一個“魔法開關”—–magic_quotes_gpc。(該開關已在5.4.0版本被刪除,始終置為off)

    當magic_quotes_gpc = on時,從外部post、get、cooki過來的數據都會在預定義字符之前添加”\“。

    比如:

    程序中var_dump($_GET[‘id’]);

    輸出的結果為:

    string(3) “1\’”

    預定義的字符為:

    單引號(‘) 雙引號(”) 反斜杠(\) NULL

    當magic_quotes_gpc=off時,寫入數據庫的字符串未經過任何過濾處理,從數據庫中讀出的字符串也未作任何處理。如何這樣設置這個開關,并且沒有其他對字符串進行處理的操作,那么可能會給數據庫的讀寫帶來問題,例如:

    將數據:$data = “insert_data’”to_mysal”;(data和to之間是一個單引號,一個雙引號)

    若將字符串$data寫入數據庫中,則會出現sql語句錯誤,寫入數據失敗。

    那么如果不使用這個“開關”就沒有辦法解決這個問題了嗎?答案是否定的。

    我們可以使用以下方法:

    使用addslashes() 函數

    函數原型:

    string addslashes ( string $str )

    參數:要轉義的字符串

    返回值:返回轉義后的字符串

    作用:將要轉義的字符串中的預定義字符轉義,即在預定義字符前面加上反斜杠。

    php中還有一個函數能轉義sql語句中使用的字符串中特殊的字符,該函數的原型如下:

    string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier = NULL ] )

    本函數將 unescaped_string 中的特殊字符轉義,并計及連接的當前字符集,因此可以安全用于 mysql_query()。

    現在向數據庫中插入數據的可能會引起sql語句被污染的問題已經解決了,可是如果現在想要把剛才添加到數據庫中的元素讀取出來的話,會發現讀出的數據中每個預定義的字符前面都多了一個反斜杠,這時反斜杠并不是我們想要的,那么有沒有辦法將每個預定義字符前面的反斜杠去掉呢?

    php中也提供了具有該功能的函數:

    函數原型為:

    string stripslashes ( string $str );

    函數返回值:返回一個去掉轉義反斜杠的字符串,即去掉addslashes()函數添加的字符串。

    另外tp中自定義了一個函數:

    function stripslashes_deep($value)

    {

    $value = is_array($value) ? array_map(‘stripslashes_deep’, $value) : stripslashes($value);

    return $value;

    }

    這個函數也能去除預定義字符前的反斜杠。

    現在還有一個問題:在訪問服務器之前,我們并不知道“魔法開關”的狀態是打開還是關閉,如果已經處于打開狀態,再使用addslashes()函數進行轉義,就會使預定義前面有兩個反斜杠,從而使的寫入數據庫的數據發生改變。

    解決辦法:

    可以使用函數get_magic_quotes_gpc()進行檢驗“魔法開關”是否打開。

    $data = get_magic_quotes_gpc() ? $data : addslashes($data);

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费