PHP/MySQL是主流的應用開發搭配方式,印象中PHP支持使用不少種數據庫,並且MySQL就有mysql、mysqli、pdo三種API可用。本文旨在從PHP數據庫訪問設計的思路爲軸,簡單的捋清這些關係。mysql
PHP手冊中《數據庫擴展》一章有兩部分:數據庫抽象層、針對各數據庫系統對應的擴展,已是足夠的說明了,要更深入的理解可去研讀。sql
首先,直接的想法是,PHP應該爲不一樣的數據庫實現不一樣的數據庫抽象層,調用客戶端庫API來使用DBMS。以下圖:
數據庫
而後,考慮這個場景:當PHP應用寫好後,環境數據庫不一樣時,就要用對應的數據庫抽象層重寫項目全部數據庫相關代碼。因此可否把訪問抽象出來,用不一樣數據庫時,只要切換不一樣實現就ok了。以下圖:
服務器
最後,主流選用MySQL固然是既能夠使用mysql、mysqli兩種數據庫抽象層,又能夠使用PDO數據訪問抽象層(須安裝PDO_MYSQL擴展實現PDO接口)。以下圖:
spa
固然任何一個數據庫抽象層,都要在PHP編譯時都要指定數據庫的客戶端庫以使用數據庫服務器。以MySQL爲例,推薦用mysqlnd庫,配置項:
--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd設計
如今是否是清晰些了呢?接口