MySQL,MySQLi和PDO有什么区别?[关闭]


Answers:


100

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

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

我建议将PDO与准备好的语句一起使用。它是一个经过精心设计的API,可让您在必要时更轻松地移至另一个数据库(包括支持ODBC的数据库)。


9
通常对于程序,您必须使用mysql _ *()函数,而对于OO,则需要使用mysqli!事实是mysqli完全替代了mysql的早期(PHP 4)实现。可以在mysqli中同时使用过程样式和OO样式。
Patrick Allaert 2010年

@帕特里克,谢谢。我已经改正了。
马修·弗拉申

46

这些是访问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


3
不再有感觉:PHP7删除了mysql API,留下了PDO和mysqli
Manuel

3

mysqli是mysql的增强版本。

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


4
从手动文件复制不是很有用。
许鼎

3

具体地说,与以前的MySQL扩展相比,MySQLi扩展具有以下非常有用的好处。

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

PDO扩展

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.