mysql_real_escape_string和mysql_escape_string有什么本質的區別,有什么用處,為什么被棄用?


mysql_real_escape_string和mysql_escape_string有什么本質的區別,有什么用處,為什么被棄用?

1.官方說明:

1.1 mysql_real_escape_string

(PHP 4 >= 4.3.0, PHP 5)

mysql_real_escape_string — 轉義 SQL 語句中使用的字符串中的特殊字符,並考慮到連接的當前字符集

Warning

本擴展自 PHP 5.5.0 起已廢棄,並在自 PHP 7.0.0 開始被移除。應使用 MySQLi或 PDO_MySQL擴展來替換之。參見 [MySQL:選擇 API]) 指南以及相關 FAQ 來獲取更多信息。用以替代本函數的有:

  • mysqli_real_escape_string()

  • PDO::quote()

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

本函數將 unescaped_string 中的特殊字符轉義,並接收連接的當前字符集,因此可以安全用於 mysql_query()

mysql_real_escape_string() 調用mysql庫的函數mysql_real_escape_string, 在以下字符前添加反斜杠: \x00, \n, \r, **, ', " 和 \x1a.

為了安全起見,在像MySQL傳送查詢前,必須調用這個函數(除了少數例外情況)。

參數說明

unescaped_string

The string that is to be escaped.

link_identifier

MySQL 連接。如不指定連接標識,則使用由 mysql_connect() 最近打開的連接。如果沒有找到該連接,會嘗試不帶參數調用 mysql_connect() 來創建。如沒有找到連接或無法建立連接,則會生成 E_WARNING 級別的錯誤

1.2 mysql_escape_string

(PHP 4 >= 4.0.3, PHP 5)

mysql_escape_string — 轉義一個字符串用於 mysql_query

說明

mysql_escape_string ( string $unescaped_string ) : string

本函數將 unescaped_string 轉義,使之可以安全用於mysql_query()。

Note: mysql_escape_string() 並不轉義%* 和 _。 本函數和mysql_real_escape_string() 完全一樣,除了 mysql_real_escape_string() 接受的是一個連接句柄並根據當前字符集轉義字符串。mysql_escape_string() 並不接受連接參數,也不管當前字符集設定。

2.用處及區別

通過上面的說明,我們可以知道兩者都是為了防止sql注入,對傳遞的字符串進行轉義處理,但兩者有一些區別

2.1mysql_real_escape_string:

1.該函數有兩個參數,其中第二個參數是MySQL 連接,為選填參數,默認為上一個數據庫鏈接connection

2.使用之前要先連接上數據庫,否則會出錯

3.在轉義字符串的時候,會考慮當前鏈接connection字符集。

2.2 mysql_escapte_string

mysql_escapte_string僅僅是對字符串進行轉義處理,不考慮mysql鏈接及字符集問題。

請記住,任何轉義操作都不一定能避免sql注入的問題,所有轉義都永遠不足以保護數據庫,因為這種轉義操作是一種反應式防御機制,它僅修復數據庫中非常有限且已知的漏洞

所以適當且唯一(實際上)的防御是一種主動:使用准備好的語句。對准備好的語句的設計要格外小心,以便僅執行有效的和已編程的SQL。如果正確完成,則會大大降低執行意外SQL的可能性。比如PDO msyql 擴展

4.為什么被廢棄

其實從官方文檔也能得出,主要原因還是涉及到安全的問題,會造成sql注入。

5.拓展:mysql與mysqli的區別

mysqli連接是永久連接,而mysql是非永久連接。

mysqli的面向過程的使用,mysqli的面向對象的使用

mysql連接:每當第二次使用的時候,都會重新打開一個新的進程。 mysqli連接:一直都只使用同一個進程。 mysqli好處可以很大程度的減輕服務器端壓力。 當然,如果mysql也需要永久連接的話,就可以使用mysql_pconnect()這個函數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM