【问题标题】:Javascript string interpolation to create SQL query with Array用 Array 创建 SQL 查询的 Javascript 字符串插值
【发布时间】:2020-02-07 23:51:36
【问题描述】:

我想创建一个 SQL 查询来选择值位于字符串数组中的所有记录。 说我有以下数组

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

我想用它来构造这样的查询

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

常规字符串插值显然不适用于此。我什至尝试过sql-bricks,但显然它不支持 IN 和 WHERE。

有没有在 SQL 查询中使用数组的好方法?

【问题讨论】:

    标签: javascript sql arrays postgresql string-interpolation


    【解决方案1】:
    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 映射到一个数组,其中 ' 已替换为 ''。

    .即。

    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("','") }');`
    

    【讨论】:

    • 非常感谢。这肯定有效。我很惊讶没有找到任何更优雅的方式来做到这一点。鉴于这是一个标准的用例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多