MySQL、MySQLi和PDO有何不同?

129

MySQL、MySQLiPDO之间有什么区别?

哪一个最适合与PHP-MySQL一起使用?

4个回答

102
有(超过)三种使用 PHP 访问 MySQL 的流行方式。下面列出了一些特点/差异,详见 PHP: Choosing an API
  1. 已弃用mysql 函数 是过程式的,并且需要手动转义。
  2. MySQLi 是 mysql 函数的替代,提供面向对象和过程式版本,支持预处理语句。
  3. PDO(PHP 数据对象)是一个通用的数据库抽象层,支持许多数据库,其中包括 MySQL 。它提供了预处理语句以及在如何返回数据方面的显著灵活性。
我建议使用带有预处理语句的 PDO。它是一个设计良好的 API,可以方便地将您迁移到其他数据库(包括任何支持ODBC的数据库)。

9
有时候会有这样的困惑:在使用过程式编程时,必须使用 mysql_*() 函数,而在使用面向对象编程时,要使用 mysqli!实际上,mysqli 完全取代了早期(PHP 4)的 mysql 实现。使用 mysqli 时可以同时使用过程式和面向对象两种风格。 - Patrick Allaert

47
这些是访问MySQL后端的不同API。 - mysql 是历史API。 - mysqli 是历史API的新版本。它应该性能更好,功能更全。此外,该API是面向对象的。 - PDO_MySQL 是用于PDO的MySQL。PDO已经在PHP中引入,该项目旨在为所有数据库访问提供一个通用API,因此理论上您应该能够在不更改任何代码的情况下迁移RDMS(如果您的查询中不使用特定的RDBM函数),也是面向对象的。 所以这取决于您想要生成什么样的代码。如果您喜欢面向对象的层或纯函数... 我的建议是: 1. PDO 2. MySQLi 3. mysql 此外,我感觉mysql API可能会在未来的PHP版本中被删除。

4
PHP7移除了mysql API,只留下了PDO和mysqli,这已经不仅仅是一个感觉了。 - Manuel

3

mysqli 是 MySQL 的增强版。

PDO 扩展 为在 PHP 中访问数据库定义了一个轻量级一致性接口。实现 PDO 接口的每个数据库驱动程序都可以将数据库特定功能公开为常规扩展函数。


5
从手册文件中复制并不是非常有用。 - XuDing

3
具体来说,MySQLi扩展相较于旧版MySQL扩展提供了以下极其有用的优势: 面向对象接口(除了过程式接口) 支持预处理语句 事务+存储过程支持 更加友好的语法 速度提升 增强调试 PDO扩展是一个数据库抽象层。具体来说,它不是一个仅仅针对MySQL的接口,因为它提供了许多数据库引擎的驱动程序(当然包括MYSQL)。 PDO旨在提供一致的API,这意味着当改变数据库引擎时,代码改变应该最小化。使用PDO时,只需通过更改所使用的驱动程序,您的代码通常可以跨多个数据库引擎“轻松运行”。 除了跨数据库兼容外,PDO也支持预处理语句、存储过程等,并使用MySQL驱动程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,