Правильный способ подготовки операторов 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%"])
Другие вопросы по тегам