选择 API

PHP 提供不同的 API 来连接到 MySQL。下面我们展示了 mysqli 和 PDO 扩展提供的 API。每个代码片段都创建到运行在 "example.com" 上的 MySQL 服务器的连接,使用用户名 "user" 和密码 "password"。并且运行一个查询来问候用户。

示例 #1 比较 MySQL API

<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo
htmlentities($row['_message']);

// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo
htmlentities($row['_message']);

示例 #2 比较预处理语句

<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$statement = $mysqli->prepare("SELECT District FROM City WHERE Name=?");
$statement->execute(["Amersfoort"]);
$result = $statement->get_result();
$row = $result->fetch_assoc();
echo
htmlentities($row['District']);

// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->prepare("SELECT District FROM City WHERE Name=?");
$statement->execute(["Amersfoort"]);
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo
htmlentities($row['District']);

功能比较

这两个扩展的总体性能被认为大致相同。尽管扩展的性能只占 PHP Web 请求总运行时间的极小部分。通常,影响低至 0.1%。

  ext/mysqli PDO_MySQL
引入的 PHP 版本 5.0 5.1
包含在 PHP 7.x 和 8.x 中
开发状态 活跃 活跃
生命周期 活跃 活跃
推荐用于新项目
OOP 接口
过程式接口
API 支持使用 mysqlnd 的非阻塞、异步查询
持久连接
API 支持字符集
API 支持服务器端预处理语句
API 支持客户端端预处理语句
API 支持存储过程
API 支持多语句 大多数
API 支持事务
可以使用 SQL 控制事务
支持所有 MySQL 5.1+ 功能 大多数
添加备注

用户贡献的备注 2 备注

alvaro at demogracia dot com
12 年前
除了功能列表之外,我建议您尝试一下 MySQLi 和 PDO,找出您最喜欢的 API 设计。MySQLi 功能更强大,可能更复杂。PDO 更优雅,并且如果将来您需要使用不同的 DBMS,您只需要学习一个 PHP API 即可。
rellect at gmail dot com
5 年前
另一个需要考虑的点,也是 PDO 的优点之一,是它不限于 mysql,还支持其他数据库引擎,如 PostgreSQL、SQLite 等。
To Top