node-mysql 在查询中使用数组

Posted

技术标签:

【中文标题】node-mysql 在查询中使用数组【英文标题】:node-mysql Using array in query 【发布时间】: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));
    
);

【问题讨论】:

【参考方案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));
 
);

【讨论】:

以上是关于node-mysql 在查询中使用数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 node-mysql 和 ExpressJS 在一个请求中执行两个或多个查询

MySQL 查询在 phpMyAdmin 中返回的 node-mysql 中缺少结果

返回 node-mysql 中 graphql 解析器函数的 mysql 查询

MySQL查询丢失导致在phpMyAdmin中返回的node-mysql

Node.JS 再次运行 Node-Mysql 查询而不停止 node.js 脚本

for循环和mysql节点如何等待所有查询完成处理视图