MySQL与MySQLi使用PHP时
哪个更好,MySQL或MySQLi? 为什么? 我应该用哪个?
我的意思是不仅仅是在性能方面,而且还有其他相关的function。
如果你看看MySQL改进的扩展概述 ,它应该告诉你一切你需要知道的两者之间的差异。
主要有用的function是:
- 一个面向对象的接口
- 支持准备好的语句
- 支持多种语句
- 支持交易
- 增强的debuggingfunction
- embedded式服务器支持
有一个手册页来帮助selectmysql,mysqli和PDO at
- http://php.net/manual/en/mysqlinfo.api.choosing.php和;
- http://www.php.net/manual/en/mysqlinfo.library.choosing.php
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限制的子协议的参数?