使用 PHP 时 MySQL 与 MySQLi 的比较

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

我的意思是不仅仅是性能方面,而且是任何其他相关的特性方面。

230948 次浏览

更好的是 PDO; 它是一个不那么复杂的接口,并且还提供了与 MySQLi 相同的特性。

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

MySQLi 代表改进的 MySQL。它是一个面向 MySQL 绑定的面向对象接口,使得使用起来更加容易。它还支持准备好的语句(非常非常有用)。如果您使用的是 PHP5,请使用 MySQLi。

如果你看一下 改进的扩展概述,它应该告诉你所有你需要知道的关于两者之间的差异。

主要的有用功能包括:

  • 面向对象的接口
  • 对事先准备好的陈述的支持
  • 支持多语句
  • 对交易的支持
  • 增强的调试能力
  • 嵌入式服务器支持。

对我来说,事先准备好的语句是必备的功能。更确切地说,是参数绑定(只对准备好的语句有效)。这是将字符串插入 SQL 命令的唯一合理方法。我真的不相信“逃跑”功能。数据库连接是一个二进制协议,为什么使用 ASCII 有限的子协议的参数?

我已经放弃使用 mysqli 了。它太不稳定了。我曾经遇到过使用 mysqli 使 PHP 崩溃的查询,但是在 mysql 包中工作得很好。还有 Mysqli 在 LONGTEXT 列上崩溃。自从至少2005年 却依然支离破碎以来,这个错误已经以各种形式被提出。我真的很想使用事先准备好的语句,但 mysqli 不够可靠(而且似乎没有人费心去修复它)。如果您真的希望使用准备好的语句,请使用 PDO。

这里有一个手册页面,专门帮助您在 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

还有一个额外的特性矩阵,可以将库(new mysqlnd 与 libmysql)进行比较

还有一篇非常详尽的博客文章