【发布时间】:2019-04-05 17:46:22
【问题描述】:
我正在使用 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 升级后,我收到以下错误:
警告:PDOStatement::execute(): SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的“组”附近使用 ...
并且查询本身失败。但是,如果我将代码更改为以下内容:
$sql = 'SELECT * FROM cool.groups';
$sth = $database->prepare($sql);
$sth->execute();
我没有收到任何错误,并且在获取它时会返回所有内容。我一直在与 AWS 支持人员交谈,他们向我保证他们没有任何问题,并且尽管升级中没有保留一些设置(即数据库名称是随机更改的),但没有问题。
PDO 有错误吗?此次升级后,任何未明确指定模式的查询都会中断,这是一个巨大的遗留代码库,这是一个主要问题。我们也不能回到我们的旧 MySQL 版本。
【问题讨论】: