使用PHP时MySQL与MySQLi

时间:2009-02-14 11:43:42

标签: php mysql

哪个更好,MySQL还是MySQLi?为什么?我应该使用哪种?

我的意思不仅仅是在性能方面,还包括任何其他相关功能。

6 个答案:

答案 0 :(得分:107)

如果您查看MySQL Improved Extension Overview,它应该告诉您需要知道的关于两者之间差异的所有信息。

主要有用的功能是:

  • 面向对象的界面
  • 支持准备好的陈述
  • 支持多种陈述
  • 支持交易
  • 增强的调试功能
  • 嵌入式服务器支持。

答案 1 :(得分:69)

有一个专门用于帮助在

中选择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)

以及

上非常详尽的博客文章

答案 2 :(得分:15)

我放弃使用mysqli。它太不稳定了。我有使用mysqli崩溃PHP的查询,但使用mysql包工作得很好。 mysqli crashes on LONGTEXT columns也是{{3}}。自从至少2005年并且仍然存在以来,已经以各种形式提出了这个错误。老实说,我喜欢使用准备好的语句,但mysqli只是不够可靠(并且似乎没有人愿意修复它)。如果你真的想要准备好的陈述请与PDO一起使用。

答案 3 :(得分:12)

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

答案 4 :(得分:5)

PDO更好的是什么;它是一个不那么狡猾的界面,并提供与MySQLi相同的功能。

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

答案 5 :(得分:3)

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