什么时候应该使用 MySQLi 而不是 MySQL?

Posted

技术标签:

【中文标题】什么时候应该使用 MySQLi 而不是 MySQL?【英文标题】:When should I use MySQLi instead of MySQL? 【发布时间】:2012-02-12 01:39:27 【问题描述】:

有人可以为我澄清一下使用 mysqli 而不是 MySQL 的优点和缺点吗?是否有不应该使用 MySQLi 的情况?为了使用 MySQLi,我需要以不同的方式配置我的服务器吗?例如,我是否需要升级 Apache 或 php 才能支持 MySQLi?

【问题讨论】:

***.com/questions/548986/mysql-vs-mysqli-in-php的可能重复 (参考) php.net/manual/en/mysqlinfo.api.choosing.php mysqli or PDO - what are the pros and cons? 的可能副本 【参考方案1】:

您应该使用 MySQLi 扩展而不是 MySQL 扩展的原因有很多:

    MySQLi 为您提供准备好的语句 - 一种将数据发送到 MySQL 并保护您免受 SQL 注入的更安全方式。 仅此一项就足以让您始终选择 MySQLi 而不是 MySQL。 MySQLi 支持大多数 MySQL 功能。 MySQLi 是面向对象的。 MySQLi 支持预处理语句、事务和多语句。 旧的 MySQL 扩展是deprecated as of PHP 5.5.0

还有其他好处。但主要是,您应该关注安全性和稳定性——而 MySQLi 正是为您提供了这一点。

【讨论】:

我不会将准备好的语句称为“更安全”。我会说更容易保证安全。【参考方案2】:

PHP 团队拒绝进一步支持 mysql 扩展。这个理由就够了。

所有其他原因都没有多大意义:

MySQLi 为您提供准备好的语句 - 可以将旧的 mysql 与手动处理的占位符一起使用并且变得更加安全。仅此一项就应该阻止 MySQL 被无用的弃用。 MySQLi 支持大多数 PHP 用户从未听说过的大多数 MySQL 功能MySQLi 是面向对象的 - 一双手可以在几个小时内使旧的 mysql 面向对象。 *MySQLi 支持 transactions* - mysql 也支持它们。只需运行START TRANSACTION 查询即可。 多个语句 - 但实际上没有人需要它们。 准备好的陈述 - 事实上,the support is horrible, renders them practiaclly unusable

所以,根本没有优势。 如果您想与未弃用但可用的扩展相处 - 去PDO。

【讨论】:

你的观点真的很愚蠢——对不起。当已经有可用的对象时,我到底为什么要花几个小时用某物制作一个对象?说大多数人没有听说过许多 mysql 功能是荒谬的,甚至不值得争论,因为这毫无意义(也完全是主观的)。另外,我经常需要多个语句。你不会用mysql,不代表别人也不知道。【参考方案3】:

除非您使用的是旧版本的 MySQL 数据库(4.1.3 之前)或需要一些尚未包含在 MySQLi 中的功能(我认为有两个功能之一没有被转移),否则请坚持使用 MySQLi只要有可能。

【讨论】:

它们在我们的服务器上,我们会保持最新状态。这完全取决于您的 MySQL 配置和版本。不幸的是,我手头没有任何东西,而且谷歌中出现的所有基准测试都是几年前在较旧的软件和硬件上运行的。 可能不会,但在执行后台进程和管理时,选择正确的功能可以节省几分钟的处理时间。特别是在处理数据库中的数百万个条目时。实际上,您可能不会通过 PHP 进行这么大的查询。【参考方案4】:

如果可能,总是。

您的 PHP 安装可能不支持 MySQLi。但是,大多数托管服务提供商都支持 MySQLi。

【讨论】:

【参考方案5】:

如果您使用的是mysql > 4.1.3。 mysqli 是 php 中 mysql 的新接口。来自http://www.php.net/manual/en/mysqli.overview.php的引用

什么是 PHP 的 MySQL 扩展?

这是最初的扩展,旨在让您开发与 MySQL 数据库交互的 PHP 应用程序。 mysql 扩展提供了一个过程接口,仅适用于 4.1.3 之前的 MySQL 版本。此扩展可用于 MySQL 4.1.3 或更高版本,但并非所有最新的 MySQL 服务器功能都可用。

Note:

If you are using MySQL versions 4.1.3 or later it is strongly recommended that you 
use the mysqli extension instead.

【讨论】:

以上是关于什么时候应该使用 MySQLi 而不是 MySQL?的主要内容,如果未能解决你的问题,请参考以下文章

mysqli 更新查询是不是应该返回结果?

php中的Mysql vs Mysqli哪个更好[重复]

mysql和mysqli的区别

mysqli 存储 php 变量而不是值

Zend db 适配器 mysqli 或 PDO_MYSQL

Mysql和Mysqli的区别