gpt4 book ai didi

php - MySQL PDO dbname 在 MySQL 升级后停止工作

转载 作者:行者123 更新时间:2023-12-01 00:34:57 25 4
gpt4 key购买 nike

我正在使用 PHP 和 PDO 连接到运行 MySQL 的远程 RDS 实例。以前它运行的是 MySQL 5.7。我把它升级到 MySQL 8.0.15。在我这样做之后,我编写的所有没有显式模式名称的 PHP 代码都停止工作了。

作为引用,我使用指向有效模式的 dbname 属性连接到 pdo。我还在升级后的数据库上完成了use schema_name;

这是使用 PDO 连接的代码:

$database = new PDO('mysql:host=<HOST>;dbname=cool;charset=<CHARSET>, <USERNAME>, <PASSWORD>);

现在,如果我的 cool 架构中有一个名为 groups 的表,并且我执行以下代码:

$sql = 'SELECT * FROM groups';
$sth = $database->prepare($sql);
$sth->execute();

我以前在 MySQL 5.7 中没有问题,这段代码会执行。但是,在 RDS 升级后,我收到以下错误:

Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups' at line 1 in ...

查询本身失败了。但是,如果我将代码更改为以下内容:

$sql = 'SELECT * FROM cool.groups';
$sth = $database->prepare($sql);
$sth->execute();

我没有收到任何错误,所有内容都在获取时返回。我一直在与 AWS 支持人员交谈,他们向我保证他们没有任何问题,并且尽管升级后没有保留某些设置(即数据库名称随机更改),但没有问题。

PDO 有问题吗?此次升级后,任何未明确指定模式的查询都会中断,这是一个巨大的遗留代码库,这是一个主要问题。我们也无法回到旧的 MySQL 版本。

最佳答案

groups是 v8.0.2 中的保留字。要么更改字段名称,要么用反引号将其封装:

`groups`

关于php - MySQL PDO dbname 在 MySQL 升级后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55540844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com