【SQL知识】PDO 和 MySQLi 的区别

目录

简介

主要区别

预处理语句示例比较

PDO 示例

MySQLi 示例

选择建议

简介

PDO (PHP Data Objects) 和 MySQLi (MySQL Improved) 都是 PHP 中用于数据库操作的扩展,都支持预处理语句,但有一些重要区别:

主要区别

  1. 数据库支持

    • PDO:支持多种数据库(MySQL, PostgreSQL, SQLite, Oracle 等)

    • MySQLi:仅支持 MySQL 数据库

  2. API 风格

    • PDO:提供一致的面向对象接口(也支持过程式)

    • MySQLi:提供面向对象和过程式两种接口

  3. 预处理语句

    • PDO:命名参数和位置参数都支持

    • MySQLi:只支持位置参数(?)

  4. 错误处理

    • PDO:支持异常处理(可通过 setAttribute 设置)

    • MySQLi:主要使用错误代码和函数

预处理语句示例比较

PDO 示例

// 连接
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
​
// 预处理语句 - 命名参数
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id AND status = :status");
$stmt->execute([':id' => $id, ':status' => $status]);
​
// 预处理语句 - 位置参数
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ? AND status = ?");
$stmt->execute([$id, $status]);

MySQLi 示例

// 连接
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
​
// 预处理语句 - 只有位置参数
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ? AND status = ?");
$stmt->bind_param("is", $id, $status); // i=integer, s=string
$stmt->execute();

选择建议

  • 使用 PDO 如果:

    • 需要支持多种数据库

    • 想要命名参数的便利性

    • 偏好异常处理方式

  • 使用 MySQLi 如果:

    • 只使用 MySQL

    • 需要 MySQL 特有的功能(如异步查询)

    • 已经在使用 MySQL 扩展并希望平滑迁移

两者在性能上差异不大,选择主要取决于项目需求和个人偏好。

你可能感兴趣的:(【SQL知识】PDO 和 MySQLi 的区别)