mysql扩展已被弃用,将来将被删除:改用mysqli或pdo

7rtdyuoh  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(413)

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

为什么我不应该在php中使用mysql函数(12个答案)
6年前关门了。
当我尝试从php连接到mysql服务器时,我看到以下错误:
已弃用:mysql扩展已弃用,将来将被删除:请在第123行的/path/to/filename.php中改用mysqli或pdo
参考行上的代码为:

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

我确信这些参数是正确的,并且这个精确的代码已经工作了很多年没有问题了。实际上,我是从一个关于php的源代码丰富的教程中获得的。
为什么会这样?
我该怎么修?
我知道通过设置 error_reportingphp.ini 排除 E_DEPRECATED :

error_reporting = E_ALL ^ E_DEPRECATED

如果我那样做会怎么样?

jxct1oxe

jxct1oxe1#

为什么会这样?
整个 ext/mysql php扩展,它提供了以前缀命名的所有函数 mysql_ ,在phpv5.5.0中被正式弃用,在phpv7中被删除。
它最初是在phpv2.0(1997年11月)中为mysql v3.20引入的,自2006年以来没有添加任何新特性。再加上缺乏新特性,在复杂的安全漏洞中维护这些旧代码是困难的。
自2011年6月以来,该手册包含了反对在新代码中使用它的警告。
我该怎么修?
正如错误消息所暗示的,您可以考虑另外两个mysql扩展:mysqli和pdoïumysql,它们中的任何一个都可以用来代替mysql ext/mysql . 这两个版本从v5.0开始就在php核心中,因此如果您使用的版本抛出了这些不推荐使用的错误,那么您几乎可以肯定地立即开始使用它们,即不需要任何安装工作。
它们略有不同,但与旧的扩展相比有许多优点,包括对事务、存储过程和预处理语句的api支持(从而提供了抵御sql注入攻击的最佳方法)。php开发人员ulf wendel对这些特性进行了全面的比较。
org有一个关于从 ext/mysql 去pdo。
我知道通过设置 error_reportingphp.ini 排除 E_DEPRECATED :

error_reporting = E_ALL ^ E_DEPRECATED

如果我那样做会怎么样?
是的,可以抑制此类错误消息并继续使用旧的 ext/mysql 暂时延期。但是您真的不应该这样做这是来自开发人员的最后一个警告,该扩展可能不会与php的未来版本捆绑在一起(实际上,正如前面提到的,它已经从phpv7中删除)。相反,您应该利用这个机会现在就迁移应用程序,以免为时已晚。
还请注意,此技术将抑制所有 E_DEPRECATED 信息,而不仅仅是与 ext/mysql 扩展:因此您可能不知道其他即将对php进行的更改会影响您的应用程序代码。当然,通过使用php的错误控制操作符,也就是在相关行前面加上 @ -但是,这将抑制该表达式引发的所有错误,而不仅仅是 E_DEPRECATED 一个。

你该怎么办?

你正在开始一个新项目。
完全没有理由使用 ext/mysql -选择另一个更现代的扩展,而不是收获的好处,他们提供的回报。
您拥有(您自己的)遗留代码库,该代码库当前依赖于 ext/mysql .
明智的做法是执行回归测试:在确定了所有潜在的影响区域、围绕每个区域进行了规划,然后在一个过渡环境中彻底测试了解决方案之前,不应该更改任何内容(尤其是升级php)。
遵循良好的编码实践,您的应用程序是以松散集成/模块化的方式开发的,数据库访问方法在一个地方都是自包含的,可以很容易地替换为一个新的扩展。
花半小时重写这个模块,使用另一个更现代的扩展;彻底测试。您可以稍后引入进一步的改进,以获得它们提供的好处的回报。
数据库访问方法分散在各处,很难用新的扩展替换掉。
考虑一下现在是否真的需要升级到phpv5.5。
你应该开始计划替换 ext/mysql 使用另一种更现代的扩展,以便您可以从它们提供的好处中获得回报;您还可以利用它将数据库访问方法重构为更模块化的结构。
但是,如果您有立即升级php的迫切需要,您可以考虑暂时抑制deprecation错误:但是首先要确定是否还有任何其他被抛出的deprecation错误。
您使用的第三方项目依赖于 ext/mysql .
考虑一下现在是否真的需要升级到phpv5.5。
检查开发人员是否发布了与此特定问题相关的任何修复、解决方法或指导;或者,如果没有,通过提请他们注意这个问题来迫使他们这样做。如果您有立即升级php的迫切需要,您可以考虑暂时抑制不推荐使用的错误:但是首先要确定是否还有任何其他被抛出的不推荐使用的错误。
进行回归测试是绝对必要的。

相关问题