【问题标题】:node-mysql Using array in querynode-mysql 在查询中使用数组
【发布时间】:2014-01-16 16:21:18
【问题描述】:

我正在尝试使用数组进行查询,但出现解析错误。

a - 包含一个数组

例如:[7、26、87、65、86、23、63、69、44、61、8、79、47、88、15、17]

conexao_bd.escape(a) - 转义数组

例如:7、26、87、65、86、23、63、69、44、61、8、79、47、88、15、17

它需要是这种格式(7、26、87、65、86、23、63、69、44、61、8、79、47、88、15、17),所以我可以使用它查询。任何帮助如何更改格式?

代码

conexao_bd.query("SELECT question, answer FROM ", conexao_bd.escape(tipo) + " WHERE id IN " + conexao_bd.escape(a) ,function(err, rows){

    if(err) console.log("Erro na query questions: "+err);
    else{
        perguntas.questions.push(rows);
        console.log(JSON.stringify(perguntas));
    }
});

【问题讨论】:

    标签: javascript mysql arrays node.js escaping


    【解决方案1】:

    查看 Array.join() 以将其作为字符串返回。这是一个基本的 javascript 问题,与节点无关。

    【讨论】:

    • 但我不想要一个字符串...它必须是这样的 (12,2,14) 以便我可以在查询中使用它:SELECT question,answer FROM Game where ID in (12,2,14);
    • 你想要一个字符串,你认为查询字符串是什么?这是一个字符串。 WHERE id IN (" + conexao_bd.escape(a).join(", ") + ") ...."
    • 转义后不能使用join。在数组上使用转义后,它不再是数组。
    • 文档说“数组变成了列表,例如 ['a', 'b'] 变成了 'a', 'b'”,所以你可能缺少的只是括号。跨度>
    • Array.prototype.join() 将数组的所有元素连接成一个字符串。 Source
    【解决方案2】:

    查询有错误

    conexao_bd.query("SELECT question, answer FROM ", 
    

    应该是

    conexao_bd.query("SELECT question, answer FROM "+
    

    【讨论】:

      【解决方案3】:

      我实际上找到了正确的答案,包括转义(以防止 SQL 注入):

      嵌套数组被转换为分组列表(用于批量插入),例如[['a', 'b'], ['c', 'd']] 变成 ('a', 'b'), ('c', 'd')

      所以正确的方法:

      conexao_bd.query("SELECT question, answer FROM ? WHERE id IN ?",[tipo,[a]],function(err, rows){
      
        if(err) 
           console.log("Erro na query questions: "+err);
        else{
          perguntas.questions.push(rows);
          console.log(JSON.stringify(perguntas));
       }
      });
      

      【讨论】:

        猜你喜欢
        • 2014-05-06
        • 1970-01-01
        • 2021-10-22
        • 2013-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-28
        • 1970-01-01
        相关资源
        最近更新 更多