MySQL PDO dbname перестает работать после обновления MySQL - PullRequest
0 голосов
/ 05 апреля 2019

Я использую 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.

1 Ответ

5 голосов
/ 05 апреля 2019

groups - зарезервированное слово из v8.0.2. Либо измените имя поля, либо заключите его в кавычки:

`groups`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...