8

最近 PHP 手册开始在每个 mysql 函数页面上显示以下警告:

不鼓励使用此扩展程序。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南和相关常见问题解答以获取更多信息...

MySQLi 曾经非常有缺陷,但他们是否对其进行了改进以使其最终名副其实?这就是他们放弃 MySQL 扩展并试图让人们使用 MySQLi 的原因吗?

实际上,如果 MySQLi 不再有问题,我想使用它。它具有更多功能,并且是面向对象的。

对此有何评论?

//编辑:我想知道的是是否可以使用 MySQLi。或者它仍然是错误的?我应该改用 PDO 吗?

4

4 回答 4

9

是的。因为(很)久。我们现在有了 mysqli,或者更好的是 PDO。

我不会把自己锁在 mysqli 中,我更喜欢 PDO。除了提供从一个数据库系统到另一个数据库系统的更轻松迁移之外,它还提供了更好的错误处理。

我想知道的是是否可以使用 MySQLi。或者它仍然是错误的?

MySQLi 本身是完全没有错误的,并且已在生产中使用。

我应该改用 PDO 吗?

如果您使用 mysqli 的唯一理由是它与 mysql 的相似性,那么您可能无论如何都不会充分发挥 mysqli 的潜力。如果你想充分发挥 mysqli 的潜力,那么你必须开始“重新”学习(你知道,学习的东西并不多)。如果您从“零基础”开始学习一些新工具,那么为什么不首先学习更好的替代方法——PDO?

另一方面,PDO 也不完美。使用 PDO,您无法访问 MySQL 特定的 API(例如构建后的 set_charset、infile 设置、异步查询、预准备语句中的 OUT 参数)。此外,如果需要,您应该将其设置为执行真正的准备好的语句。

于 2012-06-14T22:05:52.987 回答
3

PHP MySQLi 是 MySQL 改进的扩展。

mysqli 扩展允许您访问 MySQL 4.1 及更高版本提供的功能。

您可以在The MySQLi Extension Function Summary中比较它们。


如果您正在寻找面向对象的面向未来的解决方案,那么您可以选择PHP PDO

PHP 数据对象 (PDO) 扩展定义了一个轻量级、一致的接口,用于在 PHP 中访问数据库。每个实现 PDO 接口的数据库驱动程序都可以将特定于数据库的特性公开为常规扩展函数。

...

PDO 提供了一个数据访问抽象层,这意味着,无论您使用哪个数据库,您都可以使用相同的函数来发出查询和获取数据。

于 2012-06-14T22:13:29.197 回答
2

是的,您可以使用 MySQLi,而且您所写的是真实的,该 API 允许从 MySQL API 轻松更改。

对于新项目,建议不再使用ext/mysql,而是使用ext/mysqliPDO_MySQL

由于您还没有写出 2009 年对您来说有什么缺陷的东西,所以很难说这些缺陷是否已经消失。我会假设是这样,但是,好吧,你自己检查一下。

您可能还想将ext/mysqliMySQL 本机驱动程序一起使用,而不是MySQL 客户端服务器库 (libmysql)

于 2012-06-14T23:16:41.023 回答
1

差不多是时候。该mysqlAPI 虽然易于使用,但存在许多问题。可以说,最糟糕的问题是完全不支持准备好的语句,这迫使您通过字符串操作将 SQL 片段拼凑在一起。这不仅速度慢,而且是 SQL 注入漏洞的主要来源。

PDO 相对于 MySQLi 的优势之一是,当您决定在未来的项目中使用不同的 DBMS 时,您会发现不必学习新的 API。

于 2012-06-14T22:24:30.747 回答