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

mysql扩展已弃用,将来将被删除:改用mysqli或PDO,mysql,deprecated,php,Mysql,Deprecated,Php,当我尝试从PHP连接到MySQL服务器时,我看到以下错误: 已弃用:mysql扩展已弃用,将来将被删除:请在第123行的/path/to/filename.php中使用mysqli或PDO 参考行上的代码为: mysql_connect($server, $username, $password); 我确信这些论点是正确的,而这个确切的代码多年来一直在毫无问题地工作。事实上,我是从一个关于PHP的源代码丰富的教程中获得的 为什么会这样 我怎样才能修好它 我理解,通过在php.ini中设置err

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

已弃用:mysql扩展已弃用,将来将被删除:请在第123行的/path/to/filename.php中使用mysqli或PDO

参考行上的代码为:

mysql_connect($server, $username, $password);
我确信这些论点是正确的,而这个确切的代码多年来一直在毫无问题地工作。事实上,我是从一个关于PHP的源代码丰富的教程中获得的

  • 为什么会这样

  • 我怎样才能修好它

  • 我理解,通过在
    php.ini
    中设置
    error\u reporting
    以排除
    E\u DEPRECATED
    ,可以抑制不推荐使用的错误:

    error_reporting = E_ALL ^ E_DEPRECATED
    
    error_reporting = E_ALL ^ E_DEPRECATED
    
    如果我那样做会发生什么

  • 为什么会这样

    整个
    ext/mysql
    PHP扩展提供了所有以前缀
    mysql\ucode>命名的函数,它是和

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

    自2011年6月以来,该手册包含了针对其在新代码中使用的警告

  • 我怎样才能修好它

    正如错误消息所示,您可以考虑另外两个MySQL扩展:and,这两个扩展都可以用来代替
    ext/MySQL
    。这两个版本都是从v5.0开始在PHP核心中出现的,所以如果您使用的版本抛出了这些弃用错误,那么您几乎可以肯定的是,您可以立即开始使用它们,也就是说,无需任何安装工作

    它们略有不同,但与旧的扩展相比有许多优点,包括对事务、存储过程和准备好的语句的API支持(从而提供了失败的机会)。PHP开发人员Ulf Wendel写了一篇文章

    Hashphp.org有一个

  • 我理解,通过在
    php.ini
    中设置
    error\u reporting
    以排除
    E\u DEPRECATED
    ,可以抑制不推荐使用的错误:

    error_reporting = E_ALL ^ E_DEPRECATED
    
    error_reporting = E_ALL ^ E_DEPRECATED
    
    如果我那样做会发生什么

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

    还请注意,此技术将抑制所有
    E_弃用的
    消息,而不仅仅是那些与
    ext/mysql
    扩展相关的消息:因此,您可能不知道PHP的其他即将发生的更改会影响您的应用程序代码。当然,使用PHP只可能抑制出现在问题表达式上的错误,即在相关行前面加上
    @
    ,但是这将抑制该表达式引起的所有错误,而不仅仅是
    e_DEPRECATED
    错误


  • 你该怎么办?
    • 您正在启动一个新项目。

      绝对没有理由使用
      ext/mysql
      ——选择另一种更现代的扩展,并从它们提供的好处中获得回报

    • 您拥有(您自己的)传统代码库,该代码库当前依赖于
      ext/mysql

      执行回归测试是明智的:在确定所有潜在影响区域、围绕每个区域进行规划并在登台环境中彻底测试解决方案之前,不应该更改任何内容(尤其是升级PHP)

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

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

      • 数据库访问方法分散在各地,无法轻松替换为新的扩展。

        考虑一下现在是否真的需要升级到PHPV5.5

        你应该开始计划用另一个更现代的扩展取代
        ext/mysql
        ,这样你就可以从它们提供的好处中获得回报;您还可以利用它将数据库访问方法重构为更模块化的结构

        但是,如果你迫切需要升级PHP,你可以考虑暂时抑制贬义错误:但是首先要确定其他正在被丢弃的错误。

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

      考虑一下现在是否真的需要升级到PHPV5.5

      检查开发人员是否发布了与此特定问题相关的任何修复、解决方法或指南;或者,如果没有,通过提请他们注意这件事来迫使他们这样做。如果您迫切需要升级PHP,您可能暂时考虑抑制弃用错误:但首先要确保识别出其他被丢弃的错误。

      执行回归测试是绝对必要的


    请同时推荐/建议使用prepared语句,,,很多次我看到该用户使用pdo或mysqli查询的方式与mysql e相同