MySQL与MySQLi使用PHP时

哪个更好,MySQL或MySQLi? 为什么? 我应该用哪个?

我的意思是不仅仅是在性能方面,而且还有其他相关的function。

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

主要有用的function是:

  • 一个面向对象的接口
  • 支持准备好的语句
  • 支持多种语句
  • 支持交易
  • 增强的debuggingfunction
  • embedded式服务器支持

有一个手册页来帮助selectmysql,mysqli和PDO at

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

build议使用mysqli或PDO_MySQL扩展。 不build议使用旧的MySQL扩展进行新的开发。 下面提供了详细的function比较matrix。 所有三个扩展的总体性能被认为是大致相同的。 尽pipe扩展的性能仅占PHP Web请求总运行时间的一小部分。 影响通常低至0.1%。

该页面还具有比较扩展API的functionmatrix。 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

还有一个额外的functionmatrix比较库(新的mysqlnd与libmysql)at

和一个非常彻底的博客文章

我已经放弃使用mysqli。 这太简单了。 我有使用mysqli崩溃PHP的查询,但与MySQL包工作得很好。 另外mysqli在LONGTEXT列上崩溃 。 至less从2005年以来,这个bug已经以各种forms出现了, 并且一直在崩溃 。 我诚实地喜欢使用准备好的语句,但是mysqli只是不够可靠(而且似乎没有人打扰修复它)。 如果你真的想准备好声明与PDO。

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

更好的是PDO; 这是一个不太残酷的界面,也提供了与MySQLi相同的function。

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

对我来说,准备好的陈述是一个必须具备的function。 更确切地说,参数绑定(只适用于预准备语句)。 这是将string插入SQL命令的唯一真正理智的方法。 我真的不相信'逃避'的function。 数据库连接是一个二进制协议,为什么使用一个ASCII限制的子协议的参数?