Я использую PHP и PDO для подключения к удаленному экземпляру RDS под управлением MySQL. Ранее он работал под управлением MySQL 5.7. Я обновил его до MySQL 8.0.15. После того, как я это сделал, весь мой PHP-код, который был написан без явного имени схемы, перестал работать.
Для справки я подключаюсь к pdo с помощью атрибута dbname
, который указывает на допустимую схему. Я также сделал 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.