В примере 2 проблемы. Во-первых, это противоречит тому, что документация говорит вам :
ВАЖНО: Никогда не используйте зарезервированный синтаксис ${}
внутри строк шаблона ES6, так как они имеютнет знаний о том, как форматировать значения для PostgreSQL. Внутри шаблонных строк ES6 вы должны использовать только одну из 4 альтернатив - $()
, $<>
, $[]
или $//
.
Ручное форматирование запроса, как в первом примере,очень плохая практика, приводящая к плохим вещам, от разбитых запросов до внедрения SQL.
И вторая проблема заключается в том, что после переключения на правильное форматирование SQL, вы должны использовать CSV Filter чтобы правильно отформатировать список значений:
db.any(`SELECT title FROM books WHERE id IN ($/ids:csv/) ORDER BY id`, {ids})
или с помощью индексной переменной:
db.any(`SELECT title FROM books WHERE id IN ($1:csv) ORDER BY id`, [ids])
Обратите внимание, что я также изменил с ANY
на IN
операнд, так как мыпредоставляя список открытых значений здесь.
И вы можете использовать фильтр :list
взаимозаменяемо, в зависимости от того, что вам нравится.