www.111cn.net 編輯:flyfox 來源:轉載php
php與mysql的鏈接有三種API接口,分別是:PHP的MySQL擴展 、PHP的mysqli擴展 、PHP數據對象(PDO) ,下面針對以上三種鏈接方式作下總結,以備在不一樣場景下選出最優方案。html
1、特性及對比
mysql
PHP的MySQL擴展是設計開發容許PHP應用與MySQL數據庫交互的早期擴展。mysql擴展提供了一個面向過程 的接口,而且是針對MySQL4.1.3或更早版本設計的。所以,這個擴展雖然能夠與MySQL4.1.3或更新的數據庫服務端 進行交互,但並不支持後期MySQL服務端提供的一些特性。因爲太過古老,又不安全,因此已被後來的mysqli徹底取代。sql
PHP的mysqli擴展,咱們有時稱之爲MySQL加強擴展,能夠用於使用 MySQL4.1.3或更新版本中新的高級特性。其特色爲:面向對象接口 、prepared語句支持、多語句執行支持、事務支持 、加強的調試能力、嵌入式服務支持 、預處理方式徹底解決了sql注入的問題。不過其也有缺點, 就是隻支持mysql數據庫。若是你要是不操做其餘的數據庫,這無疑是最好的選擇。數據庫
PDO是PHP Data Objects的縮寫,其是PHP應用中的一個數據庫抽象層規範。PDO提供了一個統一的API接口可使得你的PHP應用不去關心具體要 鏈接的數據庫服務器系統類型。也就是說,若是你使用PDO的API,能夠在任何須要的時候無縫切換數據庫服務器,好比從oracle 到MySQL,僅僅須要修改不多的PHP代碼。其功能相似於JDBC、ODBC、DBI之類接口。一樣,其也解決了sql注入問題,有很好的安全性。不過他也有缺點,某些多語句執行查詢不支持(不過該狀況不多)。ubuntu
官文對於三者之間也作了列表性的比較:安全
PHP的mysqli擴展 | PDO (使用PDO MySQL驅動和MySQL Native驅動) | PHP的mysql擴展 | |
---|---|---|---|
引入的PHP版本 | 5.0 | 5.0 | 3.0以前 |
PHP5.x是否包含 | 是 | 是 | 是 |
MySQL開發狀態 | 活躍 | 在PHP5.3中活躍 | 僅維護 |
在MySQL新項目中的建議使用程度 | 建議 - 首選 | 建議 | 不建議 |
API的字符集支持 | 是 | 是 | 否 |
服務端prepare語句的支持狀況 | 是 | 是 | 否 |
客戶端prepare語句的支持狀況 | 否 | 是 | 否 |
存儲過程支持狀況 | 是 | 是 | 否 |
多語句執行支持狀況 | 是 | 大多數 | 否 |
是否支持全部MySQL4.1以上功能 | 是 | 大多數 | 否 |
從官方給出的這份結果上來看,優先推薦msqli,其次是pdo 。而「民間」給出的結果不少是傾向於使用PDO,由於其不擔有跨庫的優勢,更有讀寫速度快的特色。服務器
2、模塊安裝及調用oracle
以ubuntu及其衍生版爲例,經過sudo apt-get install mysqlnd 便可增長php對pdo和mysqli的支持(源碼安裝的能夠選擇phpize程序進行動態擴展)。具體能夠經過phpinfo頁面打開查看,其中在mysqlnd項下,能夠看到以下內容:ide
API Extensions mysql,mysqli,pdo_mysql
mysqli和PDO鏈接方法
代碼以下 | 複製代碼 |
// PDO |
mysqli經過配置文件進行查詢的示例:
配置文件
代碼以下 | 複製代碼 |
/var/www/t$ cat config.ini.php |
查詢代碼
代碼以下 | 複製代碼 |
/var/www/t$ cat mysqlquery.php |
pdo方式進行的查詢
代碼以下 | 複製代碼 |
<?php |
總結:
像discuz、phpcms、akcms等程序通常都會提供兩種鏈接方式mysqli或pdo-mysql(前提是你的部署環境要支持),具體在使用到類以於以上的php程序時,能夠根據本身的狀況而定