Как правильно избежать одиночной кавычки в запросах node-postgres? - PullRequest
0 голосов
/ 23 октября 2019

Мне нужно выполнить следующий запрос:

db.query("SELECT * FROM items WHERE name ILIKE '%$1%';", [ query ])

Кажется, что node-postgres не заменяет параметр $1, и я не знаю почему. Мой запрос работает, если я изменяю строку на:

db.query(`SELECT * FROM items WHERE name ILIKE '%${query}%';`)

Но теперь у меня возникают проблемы, когда запрос содержит одинарные кавычки (').

Должен ли я заменить все одинарные кавычки с помощью регулярных выражений(как в query.replace(/'/g, "''")) (я не думаю, что это рекомендуется)?

В противном случае, как я могу заставить узел-postgres принять мой параметр? Я думаю, что это как-то связано с инкапсулирующими символами %. Я продолжаю сталкиваться с той же проблемой с этой проблемой.

1 Ответ

1 голос
/ 23 октября 2019

Ваш заполнитель не заменен, потому что '%$1%' является строковым литералом SQL, который, похоже, содержит заполнитель $1. Вы можете добавить проценты в JavaScript, используя строковые операции:

db.query("SELECT * FROM items WHERE name ILIKE $1", [ `%${query}%` ])
// ---------------------------------------------------^^^^^^^^^^^^

или в SQL, используя строковые операции SQL:

db.query("SELECT * FROM items WHERE name ILIKE '%' || $1 || '%'", [ query ])
// --------------------------------------------^^^^^^----^^^^^^
...