MySQL、MySQLi 和 PDO 有什么区别?[已结束]

What is the difference between MySQL, MySQLi and PDO? [closed]

提问人:Chintan Parekh 提问时间:2/3/2010 最后编辑:Peter MortensenChintan Parekh 更新时间:5/16/2019 访问量:123448

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章来用事实和引文来回答。

10年前关闭。

MySQL、MySQLiPDO 有什么区别?

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

php mysql pdo mysqli

评论


答:

47赞 RageZ 2/3/2010 #1

这些是访问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赞 Manuel 4/15/2016
这不再是一种感觉:PHP7 删除了 mysql API,留下了 PDO 和 mysqli
3赞 Sarfraz 2/3/2010 #2

MySQLI是MySQL的增强版本。

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

评论

5赞 XuDing 10/12/2015
从手动文件复制不是很有用。
102赞 Matthew Flaschen 2/3/2010 #3

从PHP使用MySQL有(超过)三种流行的方法。这概述了 PHP 的一些功能/差异: 选择 API:

  1. (已弃用mysql 函数是过程式的,使用手动转义。
  2. MySQLi 是 mysql 函数的替代品,具有面向对象和过程版本。它支持准备好的语句。
  3. PDO(PHP数据对象)是一个通用的数据库抽象层,在许多其他数据库中支持MySQL。它提供了准备好的语句,并且在数据返回方式方面具有极大的灵活性。

我建议将 PDO 与准备好的语句一起使用。它是一个精心设计的 API,如有必要,可以让您更轻松地移动到另一个数据库(包括任何支持 ODBC 的数据库)。

评论

9赞 Patrick Allaert 6/19/2010
经常有这样的混淆,即对于过程,您必须使用 mysql_*() 函数,而对于 OO,您使用 mysqli!事实是,mysqli 完全取代了 mysql 的早期(PHP 4)实现。可以将过程样式和 OO 样式与 mysqli 一起使用。
3赞 user1776226 3/11/2013 #4

具体来说,MySQLi扩展与旧的MySQL扩展相比提供了以下非常有用的好处。

OOP 接口(除过程外) 预备语句支持 事务 + 存储过程支持 更好的语法 速度改进 增强的调试

PDO扩展

PHP 数据对象扩展是一个数据库抽象层。具体来说,这不是一个MySQL接口,因为它为许多数据库引擎(当然包括MYSQL)提供了驱动程序。

PDO 旨在提供一致的 API,这意味着当数据库引擎发生更改时,为反映这一点而进行的代码更改应该是最小的。使用 PDO 时,您的代码通常只需更改您正在使用的驱动程序即可在许多数据库引擎中“正常工作”。

除了跨数据库兼容外,PDO还支持预准备语句,存储过程等,同时使用MySQL驱动程序。