Вы не можете напрямую экранировать имена столбцов и таблицы в PDO.Вы можете увидеть ответ здесь:
экранирование имени столбца с помощью PDO
Что вы можете сделать в этой ситуации, это сделать запрос, чтобы получить все таблицы из заданногобазы данных, например:
SHOW TABLES;
Или запросить все базы данных, подобные этой:
SHOW DATABASES;
Затем используйте это в качестве белого списка для ввода данных пользователем.Когда вы используете базы данных, целесообразно исключить некоторые системные базы данных, такие как mysql
сама по себе и information_schema
.
Другой вариант - отфильтровать ввод пользователя с помощью заданного регулярного выражения, например, если ваша таблица / база данныхимена - это только строки с подчеркиванием, которые вы можете использовать:
preg_match('/^[a-z_]+$/i', $userGivenTableName)
Это должно удалить любые потенциальные строки, содержащие инъекции SQL.