mysql 扩展已弃用,并将在将来删除:使用 mysqli 或 PDO 代替 [重复]

2024-04-29

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

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

引用行上的代码是:

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

我确信这些论点是正确的,并且这个确切的代码已经工作了很多年,没有任何问题。事实上,我是从一个来源良好的 PHP 教程中获得的。

  1. 为什么会发生这种情况?

  2. 我该如何修复它?

  3. 我知道可以通过设置来抑制弃用错误error_reporting in php.ini排除E_DEPRECATED:

    error_reporting = E_ALL ^ E_DEPRECATED
    

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


  1. 为什么会发生这种情况?

    整个ext/mysqlPHP 扩展,提供所有以前缀命名的函数mysql_, was PHP v5.5.0 中正式弃用 http://php.net/manual/en/changelog.mysql.php and 在 PHP v7 中删除 https://secure.php.net/manual/en/migration70.removed-exts-sapis.php.

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

    自 2011 年 6 月起,该手册就包含了反对在新代码中使用它的警告。

  2. 我该如何修复它?

    正如错误消息所示,您可以考虑另外两个 MySQL 扩展:MySQLi http://php.net/manual/en/book.mysqli.php and PDO_MySQL http://php.net/manual/en/ref.pdo-mysql.php,其中任何一个都可以用来代替ext/mysql。两者自 v5.0 起就已存在于 PHP 核心中,因此,如果您使用的版本引发了这些弃用错误,那么您几乎可以肯定可以立即开始使用它们,即无需任何安装工作。

    它们略有不同,但比旧扩展提供了许多优势,包括对事务、存储过程和预准备语句的 API 支持(从而提供最好的办法 https://stackoverflow.com/a/60496打败SQL注入攻击 https://stackoverflow.com/q/332365)。 PHP 开发者 Ulf Wendel 写道全面的功能比较 http://blog.ulf-wendel.de/2012/php-mysql-why-to-upgrade-extmysql/.

    Hashphp.org 有一个关于迁移的优秀教程ext/mysql to PDO http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers.

  3. 我知道可以通过设置来抑制弃用错误error_reporting in php.ini排除E_DEPRECATED:

    error_reporting = E_ALL ^ E_DEPRECATED
    

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

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

    另请注意,该技术将抑制all E_DEPRECATED消息,而不仅仅是那些与ext/mysql扩展:因此您可能不知道即将对 PHP 进行的其他更改会影响您的应用程序代码。当然,可以仅通过使用 PHP 来抑制有问题的表达式中出现的错误错误控制算子 http://php.net/manual/en/language.operators.errorcontrol.php-IE。在相关行前面加上@——然而这会抑制all该表达式引发的错​​误,不仅仅是E_DEPRECATED ones.


你该怎么办?

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

    绝对没有理由 to use ext/mysql— 选择其他更现代的扩展之一,并获得它们提供的好处的回报。

  • 您拥有(您自己的)遗留代码库,当前依赖于ext/mysql.

    执行回归测试是明智的:你真的不应该改变anything(尤其是升级 PHP),直到您确定了所有潜在的影响领域,围绕每个领域进行了规划,然后在临时环境中彻底测试了您的解决方案。

    • 遵循良好的编码实践,您的应用程序以松散集成/模块化的方式开发,并且数据库访问方法全部独立于一个位置,可以轻松地替换为新扩展之一。

      花半小时重写此模块以使用其他更现代的扩展之一;彻底测试。您可以稍后进行进一步的改进,以获得它们所提供的好处的回报。

    • 数据库访问方法分散在各处,无法轻松更换为新扩展之一。

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

      您应该开始计划更换ext/mysql使用其他更现代的扩展之一,以便您可以获得它们提供的好处的回报;您还可以将其用作将数据库访问方法重构为更加模块化的结构的机会。

      但是,如果您有urgent需要立即升级 PHP,您可能会考虑暂时抑制弃用错误:但首先请确保识别也抛出的任何其他弃用错误。

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql 扩展已弃用,并将在将来删除:使用 mysqli 或 PDO 代替 [重复] 的相关文章

  • 根据选择值显示/隐藏字段

    我试图根据我选择的字段之一的值显示和隐藏一些表单字段 我希望使用数组来保存每个选择值应该显示的内容和不应该显示的内容 以将我从大量的 switch 语句中拯救出来 但无法弄清楚如何做到这一点 我正在使用 PHP 和 jQuery 任何帮助都
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • 正则表达式将从文本文件中提取句子

    我需要一个正则表达式来从文本文件中提取句子 示例文本 以 2004 年底发生的亚洲海啸灾难为例 对 Google 新闻 http news google com 的查询在一个月内 1 月 17 日 返回了超过 80 000 篇有关该事件的在
  • 将变量设置为函数调用以在 PHP 中的 if 语句中使用

    好的 我正在做一些 Wordpress 编辑 并且编写了一个 if 语句 正如您所看到的 这使用函数调用作为变量 这是因为函数调用会调用当前页面的名称 这很好 然而 当我这样做时 它也往往会与页面上的标题相呼应 这是有道理的 我可能正在尝试
  • 每月获取记录,但如果该月没有记录,则为零

    如果我有以下 SQL 表 Tests id type receiveDate 1 Blood 2012 01 18 2 Blood 2012 01 20 3 Blood 2012 01 18 4 Blood 2012 03 01 5 Blo
  • PHP设置全局环境变量的方法

    我已阅读问题 答案here https stackoverflow com questions 13568191 how to get system environment variables into php while running
  • Stripe 支付网关使用 PayumBundle 创建定期付款

    我在用支付包 https github com Payum PayumBundle将 Stripe 支付网关集成到我的 symfony2 应用程序中 我可以创建成功的直接付款 但无法创建定期付款 因为捆绑包的文档非常差 我的问题是如何使用
  • 如何在codeigniter中插入具有多个单选名称的单选按钮值?

    我正在尝试使用 codeigniter 进行在线测验 其中有一个针对某些主题的动态测验 用户可以在每个问题中添加问题和多项选择答案 我如何获得每个问题的每个多项选择答案中每个答案的值 p p
  • php - 未知:第 0 行需要打开失败。laravel 5.6

    我刚刚安装了 laracast flash 并通过 Composer 更新了 nesbot carbon 下载碳时命令发疯了 Cmd界面显示了一会界面上散落的文字和方框 下载完成 做过php artisan serve at localho
  • 如何判断是否ob_start();已经被调用了

    我使用输出缓冲进行 gzip 压缩并访问之前在 PHP 脚本中发布的内容 if ob start ob gzhandler ob start 现在 如果该脚本包含在另一个已使用 ob start 的脚本中 我会收到警告 警告 ob star
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • MySQL 错误 1172 - 结果包含多行

    在存储过程中运行查询时 我从 MySQL 收到此错误 错误代码 1172 结果包含多行 我理解错误 我正在做一个SELECT INTO var list 因此查询需要返回单行 当我使用LIMIT 1 or SELECT DISTINCT 错
  • 如何在 MySQL 中测试 Select for Update

    我正在表演SELECT FOR UPDATE或 InnoDB 表的行级锁定 我的目的是只有一个请求可以读取同一行 因此 如果两个用户同时请求相同的数据 其中只有一个人获取数据 即第一个触发查询的人 但是我如何测试锁定是否已放置 因为我正在通
  • 如何使用 jQuery 通过 Ajax 发送复选框数组的值?

    我有一个包含很多表单字段的表单 12 x n 行 每行中的第一个字段 代表产品 是一个类似于以下内容的复选框
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • array_merge 更改键

    我得到以下数组 arr array 6 gt Somedata 7 gt Somedata1 8 gt Somedata2 问题是 当我使用array merge array Select the data arr 它确实将数组键更改为 A
  • 纠正装饰器模式的一个大缺点

    不久前 我在重构一些游戏战斗代码时决定尝试装饰器模式 战斗者可以拥有各种被动能力 也可能是不同类型的生物 我认为装饰器可以让我在运行时以各种组合添加行为 因此我不需要数百个子类 我几乎已经完成了 15 个左右的被动能力装饰器 在测试中我发现
  • WordPress 中的 add_action 函数

    嗯 我正在学习创建一个 WordPress 插件 我下载了一个并阅读了代码 然后我看到了这个 我假设 foo 是它将添加操作的标签 但是 array 到底是做什么的呢 add action foo array foo1 foo2 我在看ht
  • PHP MySql 百分比

    我的问题是关于百分比 我不是专家 所以我会尽力以更好的方式进行解释 我的 mysql 服务器中有一个表 假设有 700 条记录 如下所示 Name country language Birth Lucy UK EN 1980 Mari Ca
  • gmail 不断阻止 PHPmailer 登录

    我将在接下来的 8 小时内部署一个网站 而 Gmail 刚刚停止接受 PHPmailer 登录我的帐户 起初 它在测试过程中工作了几个小时 然后 它就停止工作了 我已经允许所有允许不太安全的应用程序从 gmail 登录 但它仍然不允许 ph

随机推荐

  • 小数点分隔符 oracle

    我需要用点替换逗号 然后我需要我的值是一个数字 所以我写了这个 select replace 12345 6789 from dual it works fine 但后来我想转换to number该值 我收到错误 invalid numbe
  • PostGIS - 将多多边形转换为单多边形

    是否可以将包含多个多边形的形状文件导入到 PostGIS 中的单个多边形中 每当我尝试导入多边形的形状文件时 它都会作为多多边形 而不是单个多边形 存储在geom柱子 因此 我无法从多重多边形中将其提取为单个多边形值 非常感谢所有有用的建议
  • 使用 jQuery 更改 Bootstrap 动画进度条动画持续时间

    我正在尝试更改 Twitter Bootstrap 动画进度条上使用的 CSS3 动画的持续时间 我想要的结果是使用 jQuery 减少动画的持续时间 以便获得更快的动画 我有以下 HTML 和 CSS 并使用了以下 jQuery HTML
  • Julia 中过时的软件包列表

    有没有办法列出 Julia 中所有过时的软件包 相当于pip3 list outdated在Python中 我做了几次搜索 1 https docs julialang org en v1 stdlib Pkg 2 https pkgdoc
  • 如何使用pytorch构建多任务DNN,例如超过100个任务?

    下面是使用 pytorch 为两个回归任务构建 DNN 的示例代码 这forward函数返回两个输出 x1 x2 用于大量回归 分类任务的网络怎么样 例如 100 或 1000 个输出 对所有输出 例如 x1 x2 x100 进行硬编码绝对
  • python string format() 与带有整数键的字典[重复]

    这个问题在这里已经有答案了 我想使用Python字符串format 充当快速而肮脏的模板 但是 那dict我想使用的键是整数 字符串表示形式 一个简化的例子如下 s hello there 5 d 5 you s format d 上面的代
  • 在 iOS 中保存加密密钥的安全方法

    在我的 iOS4 应用程序中 我在多个地方使用 AES 加密 整个应用程序必须非常安全 为了做到这一点 我必须在这个应用程序中硬编码几个密钥 然后当我需要加密某些东西时随机选择这些密钥 我的问题是如何存储这些私钥 使用硬编码它们是否安全NS
  • 如何对 numpy 数组进行采样并有效地对每个样本执行计算?

    假设我有一个一维数组 我想要的是使用移动窗口进行采样 并在窗口内将每个元素除以第一个元素 例如 如果我有 2 5 8 9 6 窗口大小为 3 结果将是 1 2 5 4 1 1 6 1 8 1 1 125 0 75 我现在所做的基本上是一个f
  • Android 中 Fragment 中的布局未浮动在键盘上方

    我有一个布局 其中有两个编辑文本和水平滚动条 片段中带有一些图标 使用相对布局约束 水平滚动视图永久固定到父级的底部 单击编辑时 默认情况下会出现软键盘 当发生这种情况时 我需要水平滚动视图浮动在软键盘上方 以便每个人都可以使用它 我已将以
  • 边界椭圆约束于水平/垂直轴

    背景 我正在尝试将地形图裁剪成围绕多个风力涡轮机的最小尺寸椭圆 以最小化地图的尺寸 执行此地图裁剪的程序可以裁剪椭圆 但仅限轴沿 x 轴和 y 轴对齐的椭圆 我知道边界椭圆问题的算法 https stackoverflow com ques
  • 如何在 DatePicker 上使用 Interactivity:Interaction.Triggers

    我正在尝试将 SelectedDateChanged 绑定到命令 以便我可以将其放置在我的 ViewModel 中 但无论如何它都不会接受此代码 http pastebin com T4q8hQBA http pastebin com T4
  • 奇怪的 UIView 坐标问题

    我正在编写一个通用应用程序 因此 我进行了设置 以便我的 XIB NIB 不是使用视图控制器创建的 而是单独创建的 然后通过将 XIB 上的类名设置为相应视图控制器的类名来链接到视图控制器 并且将文件所有者的视图链接到 XIB 上的视图 然
  • 自动旋转、UIWebView 和 UITabBarController

    我有以下视图层次结构 UITabBarController UINavigationController UIViewController only supports Portrait rotation UINavigationContro
  • 无法将“记住”内联方法调用到 @androidx.compose.runtime.Composable

    我有一个大项目 我决定向其中添加 jetpack compose 首先 我准备了一个独立的项目 其中包含一些 Composable组件 一切正常 然后 在编译期间向我的项目添加源和 preper 依赖项后 我开始收到此错误 org jetb
  • Java 数组中的最小值和最大值

    我的代码没有给出错误 但它没有显示最小值和最大值 代码是 Scanner input new Scanner System in int array new int 10 System out println Enter the numbe
  • 我是否需要在编译时添加 _REENTRANT 宏以使我的 errno 线程安全?

    我是否需要在编译时添加 REENTRANT 宏以使我的 errno 线程安全 如果不是 是所有版本的 gcc linux solaris 都是这样还是某些旧版本需要 我最近测试了一段未使用 REENTRANT 的代码 发现 errno 在多
  • SharePoint 发布 HTML 字段控件将相对 URL 转换为绝对 URL

    因此 在对是否应该在面向外部的 SharePoint 网站上使用 CEWP 还是 HTML 字段控件进行了大量研究之后 我们决定使用字段控件 非常感谢 AC 现在 我们遇到了一个问题 我读过的所有博客都说这不应该是一个问题 当我们将相对 U
  • Await.ready 和 Await.result 的区别

    我知道这是一个开放式问题 我深表歉意 我理解了Await ready回报Awaitable type while Await result回报T但我还是让他们感到困惑 两者有什么区别 一个是阻塞的 另一个是非阻塞的 它们都会阻塞直到 fut
  • 切片文字中的求值顺序

    我最近浏览了Go的 语言规范 https golang org ref spec Order of evaluation https golang org ref spec Order of evaluation但发现评估顺序与本文档中解释
  • mysql 扩展已弃用,并将在将来删除:使用 mysqli 或 PDO 代替 [重复]

    这个问题在这里已经有答案了 当我尝试从 PHP 连接到 MySQL 服务器时 我看到以下错误 已弃用 mysql 扩展已弃用 将来将被删除 在第 123 行的 path to filename php 中使用 mysqli 或 PDO 代替