大家php開發使用mysqli還是pdo?
php與mysql的連接有三種API接口,分別是:PHP的MySQL擴展 、PHP的mysqli擴展 、PHP數據對象(PDO) ,下面針對以上三種連接方式做下總結,以備在不同場景下選出最優方案。
mysqli,甚至是pdo。mysql好像在4以上的版本要廢棄了,況且pdo在防注入漏洞比mysql好。
PHP 可以使用 MySQLi 或 PDO(PHP Data Objects)擴展來連接 MySQL 數據庫。
不是必須用,你也可以不用,但是pdo是比較推薦的方法。初學者可能學的是mysql面向過程的那些函數 但現在都不推薦使用了 推薦使用mysqli或者pdo的方式去連接數據庫。因為它們支持預處理,可以防sql注入。
mysqli擴展允許我們訪問MySQL 1及以上版本提供的功能。如果你的代碼想要在未來兼容更高版本的PHP與MySQL,那最好是使用mysqli,mysql函數的性能略低,而且在未來PHP版本更新中,可能被廢棄。
不僅僅是mysql_select_db,整個mysql擴展都被廢除了 推薦使用mysqli擴展或PDO擴展操作數據庫。mysqli和mysql比較相似,改以前的源碼比較方便。
為什么說PHP必須要用PDO
1、“PDO – PHP Data Objects – 是一個對多種數據庫提供統一操作方法的數據庫訪問層。”它并不具備數據庫特有的語法,但它將使切換數據庫和平臺更加容易,多數情況下,只需要簡單修改鏈接字符串。
2、不是必須用,你也可以不用,但是pdo是比較推薦的方法。初學者可能學的是mysql面向過程的那些函數 但現在都不推薦使用了 推薦使用mysqli或者pdo的方式去連接數據庫。因為它們支持預處理,可以防sql注入。
3、就是操作數據庫的方法,pdo就是把操作數據庫的函數封裝成一個pdo類,其間做了安全驗證而已。在使用PDO之前首先要設置PHP.INI文件,使PHP支持PDO,因為PHP5默認是不支持的。
4、PHP 數據對象(PDO) 擴展為PHP訪問數據庫定義了一個輕量級的一致接口。實現 PDO 接口的每個數據庫驅動可以公開具體數據庫的特性作為標準擴展功能。
5、PDO擴展為PHP訪問數據庫定義了一個輕量級的、一致性的接口,它提供了一個數據訪問抽象層,這樣,無論使用什么數據庫,都可以通過一致的函數執行查詢和獲取數據。PDO隨PHP1發行,在PHP0的PECL擴展中也可以使用。
6、pdo 比 mysqli 要好。而且 mysqli 只能使用在 mysql 數據庫;而 pdo 對各種主流數據庫都有封裝,使用方法基本一樣。
如何使用PDO查詢mysql避免SQL注入的方法
mysql防止sql注入的方法:開啟php的魔術模式,設置magic_quotes_gpc = on即可,當一些特殊字符出現在網站前端的時候,就會自動進行轉化,轉化成一些其他符號導致sql語句無法執行。
].);? PDO參數綁定的原理是將命令與參數分兩次發送到MySQL,MySQL就能識別參數與命令,從而避免SQL注入(在參數上構造命令)。mysql在新版本PHP中已經預廢棄,使用的話會拋出錯誤,現在建議使用MySQLi或者MySQL_PDO。
它打開后將自動把用戶提交的sql語句的查詢進行轉換,把轉為\,這對防止sql注入有重大作用。因此開啟:magic_quotes_gpc=on;控制錯誤信息 關閉錯誤提示信息,將錯誤信息寫到系統日志。
使用PDO防注入。這是最簡單直接的一種方式,當然低版本的PHP一般不支持PDO方式去操作,那么就只能采用其它方式。采用escape函數過濾非法字符。
可以避免SQL注入。例如 \d ---代表數字 \d{5} ---代表5位數字 \w+@\w+ ---@前的w+表示要有至少一個的字符,@代表這個模板中必須有一個@字符。
把以上這些特殊符號拒絕掉,那么即使在SQL語句中嵌入了惡意代碼,他們也將毫無作為。故始終通過測試類型、長度、格式和范圍來驗證用戶輸入,過濾用戶輸入的內容。這是防止SQL注入式攻擊的常見并且行之有效的措施。