MySQL数据库自动转换为MariaDB [重复]

MySQL database converted to MariaDB automatically [duplicate]

提问人:joey_joe1 提问时间:11/5/2023 最后编辑:user1191247joey_joe1 更新时间:11/5/2023 访问量:92

问:

我们公司有一个基于 php 5.6 和 mysql 构建的非常古老的应用程序。我们最近决定进行一些更改并更改其托管位置。虽然迁移过程有点痛苦,但大部分都进展顺利。

新的主机提供程序使用 MariaDB 而不是 MySQL。整个应用程序工作正常,除了一部分。这部分基本上是从数据库中访问配置文件数据。当我们单击“我的个人资料”时,它会给出以下错误 -

您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在第 1 行的“offset asc, gmt asc”附近使用的正确语法。

我们不知道需要什么版本的 MariaDB,因为没有办法分辨。当我们使用MySQL时,一切正常。

任何反馈将不胜感激。TIA。

我们不确定从哪里开始,因为 php 代码没有列出任何对 MariaDB 版本的引用。

php mysql mariadb php-5.6

评论

4赞 Nick 11/5/2023
请在您的问题中包含失败查询的相关部分。此外,添加您正在使用的 MariaDB 版本。
1赞 gview 11/5/2023
您描述的 bug 是您的问题中最少的。您使用的 PHP 版本已于 2018 年 12 月 31 日结束。让它沉入其中。当然,这可能是语法错误,但代码中可能存在您尚未遇到的任何其他问题。

答:

7赞 danblack 11/5/2023 #1

我强烈怀疑(因为语法有)您有一个名为“offset”的列名。MariaDB 在 MariaDB 10.6 中添加了 offset 作为关键字asc

这意味着关键字需要在 sql 中用反引号引用。`

在您的代码库和运行 SQL 的 php 代码中查找“offset”一词,将其更改为 .“偏移”一词可能还有其他用法也需要引用。offset asc, gmt asc`offset` asc, gmt asc

评论

0赞 joey_joe1 11/5/2023
只是作为后续。我解决了这个问题。以下更改发挥了神奇的作用: $timezones = getMultipleRows('timezones', “ORDER by 'offset' asc, 'gmt' asc”);您的反馈引导我查找错误的位置。非常感谢!
1赞 user1191247 11/5/2023
@joey_joe1,如果在 order by 子句中将列名两边加上了单引号,则它们现在是字符串文本,并且不会对结果集进行排序。您需要用反引号引用标识符,而不是单引号。ORDER BY `offset` ascORDER BY 'offset' asc
3赞 symcbean 11/5/2023 #2

该错误不太可能是从MySQL更改为MariaDB的直接结果。它可能是由于对任一数据库的较新版本进行了更改(据推测该数据库也“相当旧”)而产生的。它也可能是由于失败的依赖项引起的逻辑错误而引起的。但这可能是因为您使用保留字作为属性名称。

PHP 5.6 的上一个版本是在四年前。您的实现可能包含重大漏洞。我确实希望您限制公众对此的访问,如果它托管在互联网上。

你把迁移描述为“痛苦的”——但对于PHP和MySQL来说,这应该是微不足道的。但是,从您的问题中可以清楚地看出,您对PHP和MySQL没有太多技能。如果您的公司正在运行自己的服务,那么您真的应该考虑雇用东西来支持这些服务或聘请 MSP。

是的,你可以自己学习如何做到这一点。如果您已经拥有计算机科学或软件工程的第一学位,那么需要几个小时才能达到合理的熟练程度。

我们无法告诉您为什么代码会以这种方式运行,因为我们看不到代码或日志。