171

MySQL 和 MySQLi 哪个更好?为什么?我应该使用哪个?

我的意思是不仅在性能方面更好,而且在任何其他相关功能方面都更好。

4

6 回答 6

114

如果您查看MySQL 改进扩展概述,它应该会告诉您有关两者之间差异的所有信息。

主要有用的功能是:

  • 面向对象的接口
  • 支持准备好的陈述
  • 支持多个语句
  • 交易支持
  • 增强的调试功能
  • 嵌入式服务器支持。
于 2009-02-14T11:54:39.663 回答
71

有一个手册页专门用于帮助在 mysql、mysqli 和 PDO 之间进行选择,位于

PHP 团队推荐使用 mysqli 或 PDO_MySQL 进行新开发:

建议使用 mysqli 或 PDO_MySQL 扩展。不建议使用旧的mysql扩展进行新的开发。下面提供了详细的特征比较矩阵。所有三个扩展的整体性能被认为是大致相同的。尽管扩展的性能只占 PHP Web 请求总运行时间的一小部分。通常,影响低至 0.1%。

该页面还有一个比较扩展 API 的特征矩阵。mysqli和mysql API的主要区别如下:

                               mysqli     mysql
Development Status             Active     Maintenance only
Lifecycle                      Active     Long Term Deprecation Announced*
Recommended                    Yes        No
OOP API                        Yes        No
Asynchronous Queries           Yes        No
Server-Side Prep. Statements   Yes        No
Stored Procedures              Yes        No
Multiple Statements            Yes        No
Transactions                   Yes        No
MySQL 5.1+ functionality       Yes        No

* http://news.php.net/php.internals/53799

有一个额外的特征矩阵比较库(新的 mysqlnd 与 libmysql)在

和一篇非常详尽的博客文章

于 2012-01-17T08:51:41.833 回答
15

我已经放弃使用 mysqli。简直太不稳定了。我有过使用 mysqli 使 PHP 崩溃但使用 mysql 包工作得很好的查询。mysqli 在 LONGTEXT 列上也崩溃。至少从 2005 年开始,这个 bug 就以各种形式出现,并且一直被破坏。老实说,我很想使用准备好的语句,但 mysqli 不够可靠(而且似乎没有人费心修复它)。如果您真的想要准备好的语句,请使用 PDO。

于 2009-02-14T12:22:06.963 回答
13

MySQLi 代表 MySQL 改进。它是 MySQL 绑定的面向对象的接口,使事情更易于使用。它还支持准备好的语句(非常有用)。如果您使用的是 PHP 5,请使用 MySQLi。

于 2009-02-14T11:51:11.093 回答
5

更好的是PDO;它是一个不那么笨拙的界面,并且还提供与 MySQLi 相同的功能。

使用准备好的语句很好,因为它消除了 SQL 注入的可能性;使用服务器端准备好的语句是不好的,因为它增加了往返次数。

于 2009-02-14T11:46:16.707 回答
3

对我来说,准备好的陈述是必备的功能。更确切地说,参数绑定(仅适用于准备好的语句)。这是将字符串插入 SQL 命令的唯一真正明智的方法。我真的不相信“转义”功能。DB 连接是二进制协议,为什么要使用 ASCII 限制的子协议作为参数?

于 2009-02-14T11:55:10.130 回答