当前位置: 首页 > 知识库问答 >
问题:

mysql扩展不推荐使用,以后将被删除:改用mysqli或PDO[重复]

喻高寒
2023-03-14

引用行上的代码为:

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

我确信这些论点是正确的,而且这段代码已经工作多年了,没有任何问题。实际上,我是从一个关于PHP的资源丰富的教程中获得的。

>

  • 为什么会这样?

    我知道可以通过在php.ini中设置error_reporting以排除e_deprecated来抑制弃用错误:

    error_reporting = E_ALL ^ E_DEPRECATED
    

    如果我那样做会发生什么?

  • 共有1个答案

    李嘉胜
    2023-03-14

    >

  • 为什么会发生这种情况?

    整个ext/mysqlPHP扩展提供了所有以mysql_前缀命名的函数,在PHPV5.5.0中被正式弃用,在PHPV7中被删除。

    它最初是在PHPV2.0(1997年11月)中为MySQLV3.20引入的,自2006年以来没有添加任何新特性。再加上缺乏新功能,在复杂的安全漏洞中很难维护这些旧代码。

    自2011年6月以来,该手册在新的守则中包含了对使用该工具的警告。

    我该怎么修好它?

    正如错误消息所提示的那样,您可以考虑另外两个MySQL扩展:MySQLi和PDO_MySQL,它们中的任何一个都可以用来代替ext/MySQL。从V5.0开始,这两个版本都在PHP核心中,所以如果您使用的版本会抛出这些弃用错误,那么您几乎可以肯定地立即开始使用它们--即。无需任何安装工作。

    hashphp.org有一个关于从ext/mysql迁移到PDO的优秀教程。

    我知道可以通过在php.ini中设置error_reporting以排除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)。

    >

  • 遵循良好的编码实践,您的应用程序是以松散集成/模块化的方式开发的,并且数据库访问方法都是自包含的,可以很容易地替换为新的扩展。

    花半个小时重写这个模块,以使用另一个更现代的扩展;彻底测试。您可以稍后引入进一步的改进,以获得它们提供的好处。

    数据库访问方法分散在各处,不能轻易地被一个新的扩展替换掉。

    您正在使用一个依赖于ext/mysql的第三方项目。

    考虑一下此时是否真的需要升级到PHPV5.5。

    检查开发人员是否发布了与此特定问题相关的任何修补程序、变通方法或指南;或者,如果没有,则通过提请他们注意这一问题来迫使他们这样做。如果您迫切需要立即升级PHP,您可以考虑暂时取消弃用错误:但首先要确定是否有其他弃用错误也被抛出。

  •  类似资料: