Javascript строковая интерполяция для создания SQL-запроса с массивом - PullRequest
2 голосов
/ 10 октября 2019

Я хочу создать запрос SQL, чтобы выбрать все записи, значения которых находятся в массиве строк. скажем, у меня есть следующий массив

myarray = ['a', 'b', 'c']

Я хочу использовать это для построения запроса, подобного этому

SELECT * FROM my_table WHERE mycol IN ('a', 'b', 'c')

Регулярная интерполяция строкочевидно, не работает для этого. Я даже попробовал sql-bricks , но, видимо, он не поддерживает IN с WHERE.

Есть ли хороший способ использовать массивы в запросах SQL?

1 Ответ

3 голосов
/ 10 октября 2019
let sql = `SELECT * FROM my_table WHERE mycol IN ('${ myarray.join("','") }');`

Также, если вы хотите удалить нулевые значения:

let myarray = ['a', 'b', null, 'c']
let sql = `SELECT * FROM my_table WHERE mycol IN ('${ 
myarray.filter(function (el) {
  return el != null;
}).join("','")
 }');`

==>

"SELECT * FROM my_table WHERE mycol IN ('a', 'b', 'c'); "

Также, чтобы избежать sql-инъекций, вы должны сначала сопоставить myarray с массивом, где 'был заменен' '.

.ie.

let myarray = ['a', 'b', null, 'c', "d'Alambert"]
.filter(function (el) { return el != null; })
.map(function(el){ return el.replace(/'/g, "''");}); 

let sql = `SELECT * FROM my_table WHERE mycol IN ('${ myarray.join("','") }');`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...