我有一个简单的nodejs应用程序,它执行以下查询。在mysql节点中的IN子句
select * from User where userid in (?)
我得到的用户ID是一个JSON数组从客户端发送。我如何在这个选择查询中使用它?我试过 1.本身但不工作。 2.将它转换为Javascript数组,不工作
我有一个简单的nodejs应用程序,它执行以下查询。在mysql节点中的IN子句
select * from User where userid in (?)
我得到的用户ID是一个JSON数组从客户端发送。我如何在这个选择查询中使用它?我试过 1.本身但不工作。 2.将它转换为Javascript数组,不工作
这些是我尝试的两种方法。两者都有效。然后我用一种更好的方法改变了我的逻辑,所以现在我不再需要'in'子句了。
方法#1是引入SQL注入的好方法。 – robertklep
我以为是。对不起,我忘了在回答中添加。这就是为什么我改变了我的方法。 –
你可以这样做:(?,?,?,) SELECT * FROM用户凡在用户ID
var array = [];
array.push(value);
array.push(value);
array.push(value);
array.push(value);
然后使用数组作为参数那应该是绑定的。
这对于具有恒定大小的数组很好,但如果大小可以变化呢? – Aaron
您必须添加?动态,因为我在我的项目中使用 –
我扩展了json数组到一个字符串在所需的格式,然后只是与查询字符串+。那是不好的方法? –
重温这一点,因为问题的原始方法是有效的,但有一些注意事项。如果您唯一的转义参数是IN子句中的参数,那么您必须将其指定为嵌套数组;如:[[''usrId1','usrId2','usrIdN']]。这是因为un-escaping功能需要一个数组,取代每个'?'与相应的数组元素。所以,如果你想替换你唯一的'?'对于一个数组,该数组应该是所有传递参数的第一个元素。如果你有多个“?”,语法更直观,但最后一致;在这种情况下,你可以有类似于你的论点: 'myOtherArgument1', 'myOtherArgument2',[ 'usrId1', 'usrId2', 'usrIdN'], 'myOtherArgument3']
份额的代码。 –
你可以这样做:select * from User where userid in(?,?,?,?) –