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