当我们将数据库从 mysql 5.7.42 升级到 mariadb 10.5 时,PHP 5.6 的 mysql_* 函数是否兼容?

are mysql_* functions of PHP 5.6 compatible when we upgrade database from mysql 5.7.42 to mariadb 10.5?

提问人:Swati Patel 提问时间:6/14/2023 最后编辑:DharmanSwati Patel 更新时间:6/14/2023 访问量:209

问:

我的客户希望将他所有的网站脚本从 PHP 5.6 升级到 PHP 8,将 mysql 5.7.42 升级到 mariadb 10.5。我们想一个接一个地升级网站。现在的问题是,我们可以为每个域和子域选择不同的PHP版本,但对于数据库,我们没有这样的选择。因此,我们必须在服务器范围内一次将mysql 5.7.42升级到mariadb 10.5,因此它将影响服务器上客户端的所有网站。所以我的问题是,如果我们使用 PHP 5.7.42 将 mysql 5.7.42 升级到 mariadb 10.5,我们将面临什么问题。它会兼容吗?我们正在使用 mysql_* 函数,那么它是否适用于它?因为我无法同时更新所有网站脚本以进行 mysqli_* 或 PDO 更改。

我将一个网站脚本升级到PHP 8,并部署在服务器上的开发环境中,通过创建一个子域进行测试,将其PHP版本设置为PHP 8,但是服务器团队说我们也必须升级数据库,所以我完全卡在这里,请帮忙。

升级 php-5.6 mariadb-10.5 版本兼容性

评论

2赞 Dharman 6/14/2023
你最好反其道而行之。先将PHP升级到PHP 8,然后再升级数据库。
0赞 apokryfos 6/14/2023
mariadb 10.3 和 MySQL 5.7 之间的不兼容列表可能适用于此处。我知道这些版本并不完全匹配,但这是一个很好的起点
3赞 Nico Haase 6/14/2023
为什么不在暂存服务器或 CI 管道中尝试一下呢?
1赞 Dharman 6/14/2023
但实际上,我害怕在生产环境中运行 PHP 5.6。我会将PHP的升级视为紧急情况,并全力以赴。
1赞 RickN 6/14/2023
由于旧的MySQL驱动程序(不是MySQLi)已被删除,并且您不想更改网站,因此我会查看像mysql-shim这样的项目,以使用MySQLi / PDO等现代驱动程序翻译对任何新网站的调用并开发任何新网站。甚至可能使用 auto_prepend_file 加载它。mysql_*mysqli_*

答:

0赞 Dharman 6/14/2023 #1

答案是这个问题没有答案。PHP 5.6 已经很多年没有支持了。在MariaDB 10.5发布之前,它已经支持了很多年。PHP开发人员没有机会测试它,如果存在不兼容问题,那么没有人会正式将其移植到这样的旧版本。但是有些人向后移植了更改,据我所知,mysql_* 扩展至少针对 PHP 8.0 进行了更新。

你会在这种奇怪的组合中冒险。但是,当然,在生产中执行之前,您应该先对其进行测试。最好不要升级任何东西。当您开始升级时,请从 PHP 开始。PHP试图尽可能地保持与旧MySQL版本的兼容性,即使它不再受支持。

0赞 Arjan 6/14/2023 #2

简单的答案是否定的,这些函数将不起作用,因为它们自 PHP 7.0.0 以来不再存在。您也许可以找到填充码来复制这些功能,但由于 PHP 5.6 已经停产好几年了,我不确定这些填充码在 PHP 8 中的工作/维护情况如何。mysql_

我能给你的最好的建议是用PHP 8买第二台服务器(并保留当前用PHP 5.6的服务器),一次迁移一个站点。