Какие подводные камни при выполнении ошибочного запроса?

Есть некий вебсервис, который вытаскивает определенные данные с БД по запросу клиента используя динамические запросы (имя таблицы, с которой тянуть - это переменная вида 'table_%' , где % - номер таблицы). В ответ отдается массив результатов запроса. Иногда клиент может желать получить данные с таблицы которой не существует. В этом случае ему нужно отдать пустой массив. Сейчас это сделано так: Проверяю integer ли номер таблицы и просто шлю запрос в БД, если возвращает ошибку - шлю клиенту пустой массив. Есть ли какие-то минусы у такого подхода?
  • Вопрос задан
  • 217 просмотров
Пригласить эксперта
Ответы на вопрос 3
AirWorker
@AirWorker
Node.js full stack web dev
> Проверяю integer ли номер таблицы

Если нет возможности точно провалидировать таблицу до запроса к БД, можно ее вообще никак не валидировать. Просто слать запрос и ждать exception с определенным сообщением. Главное чтобы было нормальное экранирование всех переменных в запросе, чтобы не словить sql injection.
Ответ написан
@mofecuju
Зачем слать запрос БД, если вы уже проверили номер таблицы?
Я так понимаю номером таблицы у вас определяется есть ли она реально или нет.
Ответ написан
@dmitryKovalskiy
программист средней руки
Можно сделать подобную проверку :
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_scheme = 'dbname' AND TABLE_NAME = 'my_table'

и если не нашлась таблица - возвращать то что вы хотите.

P.S. Если не трудно - объясните откуда у вас вообще такая структура таблиц взялась, что вы даже не уверены что существует подходящая. А за именование table_%number я бы приговорил к вазектомии. Это нереально поддерживать, назначение таблиц неизвестно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы