2024 PHP Conference Japan

概觀

本節將介紹開發需要與 MySQL 資料庫互動的 PHP 應用程式時可用的選項。

什麼是 API?

應用程式介面 (API) 定義了應用程式為了執行所需任務而需要呼叫的類別、方法、函式和變數。對於需要與資料庫通訊的 PHP 應用程式,必要的 API 通常透過 PHP 擴充功能公開。

API 可以是程序導向或物件導向。使用程序導向 API 時,您呼叫函式來執行任務;而使用物件導向 API 時,您會實例化類別,然後呼叫結果物件上的方法。在這兩種方式中,後者通常是較好的介面,因為它更現代化,並且可以產生組織更佳的程式碼。

撰寫需要連線到 MySQL 伺服器的 PHP 應用程式時,可以使用多種 API 選項。本文將討論可用的選項,以及如何為您的應用程式選擇最佳解決方案。

什麼是連接器?

在 MySQL 文件中,術語「*連接器*」是指允許您的應用程式連線到 MySQL 資料庫伺服器的軟體。MySQL 提供了適用於各種語言的連接器,包括 PHP。

如果您的 PHP 應用程式需要與資料庫伺服器通訊,您需要撰寫 PHP 程式碼來執行諸如連線到資料庫伺服器、查詢資料庫以及其他與資料庫相關的函式等活動。需要軟體來提供您的 PHP 應用程式將使用的 API,並處理您的應用程式與資料庫伺服器之間的通訊,可能在必要時使用其他中間程式庫。此軟體統稱為連接器,因為它允許您的應用程式*連線*到資料庫伺服器。

什麼是驅動程式?

驅動程式是用於與特定類型的資料庫伺服器通訊的軟體。驅動程式也可能呼叫程式庫,例如 MySQL Client Library 或 MySQL Native Driver。這些程式庫實作了用於與 MySQL 資料庫伺服器通訊的底層協定。

舉例來說,PHP 資料物件 (PDO) 資料庫抽象層可以使用多個資料庫專用驅動程式之一。它可用的驅動程式之一是 PDO MYSQL 驅動程式,它允許它與 MySQL 伺服器互動。

有時人們會交替使用連接器和驅動程式這兩個術語,這可能會造成混淆。在與 MySQL 相關的文件中,術語「驅動程式」保留用於提供連接器套件中資料庫特定部分的軟體。

什麼是擴充?

在 PHP 文件中,您會遇到另一個術語 - *擴充*。PHP 程式碼由一個核心組成,並具有核心功能的選用擴充。PHP 與 MySQL 相關的擴充,例如 mysqli 擴充和 PDO MySQL 驅動程式擴充,是使用 PHP 擴充框架實作的。

擴充通常會向 PHP 程式設計師公開 API,以允許以程式方式使用其功能。但是,某些使用 PHP 擴充框架的擴充不會向 PHP 程式設計師公開 API。

例如,PDO MySQL 驅動程式擴充不會向 PHP 程式設計師公開 API,而是向上層的 PDO 層提供介面。

不應將 API 和擴充這兩個術語理解為相同的含義,因為擴充不一定會向程式設計師公開 API。

使用 MySQL 的主要 PHP API 提供哪些?

連線到 MySQL 資料庫伺服器時,主要有兩個 API 選項

  • PHP 的 mysqli 擴充

  • PHP 資料物件 (PDO)

每個選項都有其優缺點。以下討論旨在簡要介紹每個 API 的主要面向。

什麼是 PHP 的 mysqli 擴充?

mysqli 擴充功能,或有時稱之為 MySQL *改良* 擴充功能,是為了利用 MySQL 系統 4.1.3 及更新版本中的新功能而開發的。mysqli 擴充功能包含在 PHP 5 及更高版本中。

mysqli 擴充功能有許多優點,相較於 mysql 擴充功能的主要增強功能如下:

  • 物件導向介面

  • 支援預備語句 (Prepared Statements)

  • 支援多重語句 (Multiple Statements)

  • 支援交易 (Transactions)

  • 增強的除錯功能

除了物件導向介面外,此擴充功能也提供程序式介面。

mysqli 擴充功能是使用 PHP 擴充功能框架建構的,其原始碼位於 ext/mysqli 目錄中。

有關 mysqli 擴充功能的更多資訊,請參閱 MySQLi

什麼是 PDO?

PHP 資料物件 (PDO) 是一個專為 PHP 應用程式設計的資料庫抽象層。 PDO 為您的 PHP 應用程式提供一致的 API,無論您的應用程式將連接到哪種類型的資料庫伺服器。理論上,如果您使用 PDO API,您可以切換您使用的資料庫伺服器,例如從 Firebird 切換到 MySQL,只需要對您的 PHP 程式碼進行一些小修改。

其他資料庫抽象層的例子包括 Java 應用程式的 JDBC 和 Perl 的 DBI。

雖然 PDO 有其優點,例如簡潔、簡單、可移植的 API,但其主要缺點是它不允許您使用最新版 MySQL 伺服器中所有可用的進階功能。例如,PDO 不允許您使用 MySQL 對多重語句的支援。

PDO 是使用 PHP 擴充功能框架實作的,其原始碼位於 ext/pdo 目錄中。

有關 PDO 的更多資訊,請參閱 PDO

什麼是 PDO MYSQL 驅動程式?

PDO MYSQL 驅動程式本身並不是一個 API,至少從 PHP 程式設計師的角度來看是如此。事實上,PDO MYSQL 驅動程式位於 PDO 本身的下層,並提供 MySQL 特定的功能。程式設計師仍然呼叫 PDO API,但 PDO 使用 PDO MYSQL 驅動程式來與 MySQL 伺服器進行通訊。

PDO MYSQL 驅動程式是幾個可用的 PDO 驅動程式之一。其他可用的 PDO 驅動程式包括 Firebird 和 PostgreSQL 資料庫伺服器的驅動程式。

PDO MYSQL 驅動程式是使用 PHP 擴充功能框架實作的。其原始碼位於 ext/pdo_mysql 目錄中。它沒有向 PHP 程式設計師公開 API。

有關 PDO MYSQL 驅動程式的更多資訊,請參閱 MySQL (PDO)

什麼是 PHP 的 MySQL 原生驅動程式?

為了與 MySQL 資料庫伺服器通訊,mysqli 和 PDO MYSQL 驅動程式各自使用一個實作所需協定的低階程式庫。過去,唯一可用的程式庫是 MySQL 用戶端程式庫,也稱為 libmysqlclient

然而,libmysqlclient 所呈現的介面並未針對與 PHP 應用程式的通訊進行最佳化,因為 libmysqlclient 最初是針對 C 應用程式設計的。因此,MySQL 原生驅動程式 mysqlnd 被開發出來,作為 PHP 應用程式中 libmysqlclient 的替代方案。

mysqli 擴充功能和 PDO MYSQL 驅動程式都可以個別設定為使用 libmysqlclientmysqlnd。由於 mysqlnd 是專為在 PHP 系統中使用而設計的,因此它在記憶體和速度方面比 libmysqlclient 有許多增強功能。強烈建議您利用這些改進。

MySQL 原生驅動程式是使用 PHP 擴充框架實作的。原始碼位於 ext/mysqlnd。它沒有向 PHP 程式設計師公開 API。

功能比較

下表比較了從 PHP 連接到 MySQL 的主要方法的功能

PHP 的 MySQL API 選項比較
  PHP 的 mysqli 擴充 PDO(使用 PDO MySQL 驅動程式和 MySQL 原生驅動程式)
PHP 導入版本 5.0 5.0
MySQL 開發狀態 積極開發中 積極開發中
API 支援字元集
API 支援伺服器端預備語句
API 支援客戶端預備語句
API 支援預存程序
API 支援多重語句 大部分
支援所有 MySQL 4.1+ 功能 大部分
新增註記

使用者貢獻的註記 1 則註記

26
guatebus at dot gmail dot com
11 年前
文字:「PDO 不允許您使用 MySQL 對多重語句的支援」已過時。

自 v5.3 起,PHP 將多重語句支援引入 PDO(透過 PDO_MYSQLND 驅動程式取代先前的 PDO_MYSQL)。
To Top