Правильный способ подготовки операторов SQL с параметризованным текстовым поиском
Внезапно я понял, что, хотя это работает в отличной форме, точно так же, как это возможно:
Sql.newInstance(connectionParams).rows("SELECT FROM ITEMS WHERE id = ?", [200])
это не сработает
Sql.newInstance(connectionParams).rows("SELECT FROM ITEMS WHERE name LIKE '%?%'", ["some"])
Все, что вы можете получить, это
Не удалось выполнить: ВЫБРАТЬ ИЗ ПУНКТОВ ГДЕ имя LIKE "%?%", Поскольку: индекс столбца выходит за пределы диапазона: 1, количество столбцов: 0.
Мои вопросы:
- Это намеренно реализовано таким образом? Мне никогда не требовался параметризованный текстовый поиск, поэтому я не уверен, является ли это поведение типичным или нет.
- Как я могу, тем не менее, безопасно параметризовать утверждение с текстовым поиском в нем?
1 ответ
Я считаю, что вы хотите включить %
в параметре, например:
Sql.newInstance(connectionParams).rows("SELECT FROM ITEMS WHERE name LIKE ?", ["%some%"])