一尘不染

mysql扩展名已弃用,以后将删除:使用mysqli或PDO代替[重复]

mysql

这个问题已经在这里有了答案

为什么我不应该在PHP中使用mysql_ *函数? (15个答案)

6年前关闭。

当我尝试从PHP连接到MySQL服务器时,出现以下错误:

不推荐使用:不推荐使用mysql扩展,以后将删除:在第123行的/path/to/filename.php中使用mysqli或PDO代替

引用行上的代码是:

mysql_connect($server, $username, $password);

我确信这些论点是正确的,并且这种确切的代码已经工作了多年没有问题。确实,我是从PHP的一个源代码丰富的教程中获得的。

  1. 为什么会这样呢?

  2. 我该如何解决?

  3. 据我所知,它通过设置是可以抑制弃用错误error_reportingphp.ini排除E_DEPRECATED

    error_reporting = E_ALL ^ E_DEPRECATED
    

如果我这样做会怎样?


阅读 624

收藏
2020-05-17

共1个答案

一尘不染

  1. 为什么会这样呢?

整个ext/mysqlPHP扩展,它提供了与前缀命名的所有功能mysql_,是在PHP
V5.5.0正式弃用
,并在PHP
V7删除

它最初是在MySQL v3.20的PHP
v2.0(1997年11月)中引入的,自2006年以来未添加任何新功能。加上缺少新功能,在复杂的安全漏洞中难以维护此类旧代码。

自2011年6月起,该手册已包含警告,禁止其在新代码中使用。

  1. 我该如何解决?

如错误消息所示,您还可以考虑使用其他两个MySQL扩展:MySQLiPDO_MySQL,可以使用其中任何一个代替ext/mysql。自v5.0以来,这两个版本都已成为PHP核心,因此,如果您使用的版本会引发这些弃用错误,则几乎可以肯定地立即就开始使用它们-
即无需任何安装工作。

它们之间略有不同,但与旧扩展相比,提供了许多优势,包括对事务的API支持,存储过程和准备好的语句(从而提供克服SQL注入攻击的最佳方法)。PHP开发人员Ulf
Wendel 对功能进行了详尽的比较

Hashphp.org提供了有关从迁移ext/mysql到PDO出色教程

  1. 据我所知,它通过设置是可以抑制弃用错误error_reportingphp.ini排除E_DEPRECATED

    >     error_reporting = E_ALL ^ E_DEPRECATED
    

    如果我这样做会怎样?

是的,可以抑制此类错误消息,并ext/mysql暂时继续使用旧的扩展名。但是, 您实际上不应该这样做
-这是开发人员的最后警告,即该扩展可能不会与将来的PHP捆绑在一起(实际上,如前所述,它已从PHP v7中删除)。相反,你应该利用这个机会将应用程序迁移
,现在 ,这是为时已晚。

还要注意,该技术将禁止 所有
E_DEPRECATED消息,而不仅仅是与ext/mysql扩展有关的消息:因此,您可能没有意识到即将对PHP进行的其他更改,这些更改会影响您的应用程序代码。当然,可以通过使用PHP的错误控制运算符(即在相关行之前添加)仅抑制出现问题的表达式上的错误@但是这将抑制该表达式引发的
所有 错误,而不仅仅是错误E_DEPRECATED


你该怎么办?

  • 您正在开始一个新项目。

这里是 绝对没有理由 使用ext/mysql其他的,更现代化,扩展,而不是一个-选择并获得他们所提供的好处的回报。

  • 您拥有(您自己)当前依赖的旧版代码库ext/mysql

进行回归测试将是明智的:在确定所有潜在影响区域,针对每个潜在影响区域进行计划,然后在过渡环境中全面测试解决方案之前,您实际上不应进行 任何
更改(尤其是升级PHP)。

* **按照良好的编码惯例,您的应用程序是以松散集成/模块化的方式开发的,并且数据库访问方法都完全独立于一个地方,可以轻松地换成新的扩展之一。**

花半小时重写此模块,以使用另一个更现代的扩展;彻底测试。您以后可以进行进一步的改进,以从中获得收益。

* **数据库访问方法分散在各处,并且不能轻易地换成新扩展之一。**

考虑此时是否真的需要升级到PHP v5.5。

您应该开始计划ext/mysql用另一种更现代的扩展替换,以便从中获得收益。您也可以借此机会将数据库访问方法重构为更模块化的结构。

但是,如果 迫切 需要立即升级PHP ,则可以暂时考虑抑制弃用错误:但首先请确保确定还会抛出的其他弃用错误。

  • 您正在使用依赖的第三方项目ext/mysql

考虑此时是否真的需要升级到PHP v5.5。

检查开发人员是否已发布有关此特定问题的任何修复程序,变通方法或指南;或者,如果没有,请他们注意此事,迫使他们这样做。如果您 迫切
需要立即升级PHP,则可以暂时考虑抑制弃用错误:但是首先请确保确定还会抛出的任何其他弃用错误。

进行回归测试绝对必要。

2020-05-17