MySQL 官方提供 C 客戶端庫,其他語言驅動多構建於其上。理解三大 API 內部架構,有助於排查連接問題、選擇技術棧、評估性能邊界。
mysqld 協議交互。MYSQL(連接句柄)、MYSQL_RES(結果集)、MYSQL_ROW(行數據)、MYSQL_FIELD(列元數據)。
+------------------+ +------------------+
| Application | | DBI (Database |
| (Script) |---->| Interface) | 抽象接口層:統一 prepare/execute/fetch
+------------------+ +--------+---------+
|
v
+--------+---------+
| DBD::mysql | 驅動層:針對 MySQL 協議實現
| (DBD Driver) | 內部調用 libmysqlclient
+--------+---------+
|
v
+------+------+
| mysqld |
+-------------+
$dbh, $sth) 和方法。DBD::mysql, DBD::Pg, DBD::Oracle)。DBI->connect("dbi:mysql:dbname", $user, $pass)。mysql_insertid)屬 DBD 層,使用時犧牲可移植性。<?php ... ?> 標籤包裹腳本。mysqli_connect(), mysqli_query(), mysqli_fetch_assoc() 等。MySQL 發布包含 mysql, mysqladmin, mysqldump 等 C 客戶端源碼;CPAN 有海量 DBIx::* ORM;Packagist 有 Laravel/Eloquent、Doctrine 等 PHP ORM。**優先復用,專注業務邏輯。**
| 需求 | 推薦 | 理由 |
|---|---|---|
| 高性能獨立守護進程 | C API / C++ 封裝 | 零解釋開銷,精確內存控制 |
| 傳統 Web 應用、團隊 PHP 技術棧 | PHP PDO / mysqli | 原生 Web 整合,部署簡單 |
| 跨數據庫遷移/同步工具、運維腳本 | Perl DBI | 統一接口,CPAN 生態豐富 |
| 現代微服務、多語言混合 | 各語言原生驅動 | Go: go-sql-driver/mysql; Java: JDBC; Python: PyMySQL |