提问人:Anand 提问时间:2/14/2009 最后编辑:DharmanAnand 更新时间:10/27/2019 访问量:232198
使用 PHP 时的 MySQL 与 MySQLi [已关闭]
MySQL vs MySQLi when using PHP [closed]
问:
MySQL和MySQLi哪个更好?为什么?我应该使用哪个?
我的意思是不仅在性能方面更好,而且在任何其他相关功能方面都更好。
答:
更好的是PDO;它是一个不那么粗糙的界面,并且还提供与 MySQLi 相同的功能。
使用预准备语句很好,因为它消除了 SQL 注入的可能性;使用服务器端预准备语句是不好的,因为它会增加往返次数。
MySQLi 代表 MySQL 改进。它是MySQL绑定的面向对象的接口,使事情更易于使用。它还为准备好的语句提供支持(这非常有用)。如果您使用的是 PHP 5,请使用 MySQLi。
如果你看一下MySQL改进的扩展概述,它应该告诉你你需要知道的关于两者之间差异的所有信息。
主要有用的功能是:
- 面向对象的界面
- 支持预准备语句
- 支持多个语句
- 支持交易
- 增强的调试功能
- 嵌入式服务器支持。
评论
mysql_*()
对我来说,准备好的陈述是必不可少的功能。更准确地说,是参数绑定(仅适用于预准备语句)。这是将字符串插入 SQL 命令的唯一真正合理的方法。我真的不相信“逃逸”功能。数据库连接是二进制协议,为什么要对参数使用 ASCII 限制的子协议?
评论
我已经放弃了使用mysqli。它实在是太不稳定了。我遇到过使用 mysqli 使 PHP 崩溃的查询,但与 mysql 包一起工作得很好。此外,mysqli 在 LONGTEXT 列上崩溃。至少自 2005 年以来,这个错误一直以各种形式出现,并且仍然被破坏。老实说,我想使用准备好的语句,但 mysqli 不够可靠(而且似乎没有人费心修复它)。如果您真的想要准备好的语句,请使用 PDO。
评论
有一个手册页专门用于帮助在 mysql、mysqli 和 PDO 之间进行选择,网址为
- http://php.net/manual/en/mysqlinfo.api.choosing.php 和
- http://www.php.net/manual/en/mysqlinfo.library.choosing.php
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),位于
以及一篇非常详尽的博客文章
评论