Ant*_*ebb 25 javascript arrays node.js
我有一个字符串数组.当我使用.toString()输出它时,引号不会被保留.这使得使用"in"构建mysql查询变得很困难.考虑以下:
SELECT * FROM Table WHERE column IN ('item1','item2','item3','item4')
toString is returning: IN (item1,item2,item3,item4)
Run Code Online (Sandbox Code Playgroud)
必须有一个我在这里忽略的简单修复.
nnn*_*nnn 66
引号不会被保留,因为它们实际上并不是字符串值的一部分,它们只是在代码中指示字符串文字所必需的.
所以,不要使用toString().相反,一种方法如下:
var arr = ['item1','item2','item3','item4'];
var quotedAndCommaSeparated = "'" + arr.join("','") + "'";
// quotedAndCommaSeparated === "'item1','item2','item3','item4'"
Run Code Online (Sandbox Code Playgroud)
所述Array.join()方法返回一个字符串,它是所有连接成一个字符串与每个项目之间(可选的)分离器的阵列元件.因此,如果您指定包含引号和逗号的分隔符,则只需手动为第一个和最后一个项目(分别)附加起始和结束报价.
(请告诉我你没有使用客户端JavaScript来构建你的SQL.)
编辑:允许一个空数组,包括结果字符串的默认值,否则(由missingno指出)字符串将是"''":
var newString = arr.length === 0 ? "" : "'" + arr.join("','") + "'";
// default for empty array here ---^^
Run Code Online (Sandbox Code Playgroud)
(可能更适合if (arr.length===0)采取其他操作而不是运行SELECT语句.)
Luk*_*tor 11
用于Array.map用引号包裹每个元素:
items.map(function(item) { return "'" + item + "'" }).join(',');
Run Code Online (Sandbox Code Playgroud)
ES6 特性让代码变得更简单——箭头函数和模板字符串(在 node.js 4.0 及更高版本中实现):
items.map(i => `'${i}'`).join(',');
Run Code Online (Sandbox Code Playgroud)
您还可以使用白名单来防止 SQL 注入:
const validItems = new Set(['item1', 'item2', 'item3', 'item4']);
items
.filter(i => validItems.has(i))
.map(i => `'${i}'`)
.join(',')
Run Code Online (Sandbox Code Playgroud)
小智 7
let keys = ['key1','key2']
let keyWithQoutes = keys.map((it) => {return `'${it}'`})
let sql = `SELECT .... FROM ... WHERE id IN (${keyWithQoutes})`
console.log(sql)
Run Code Online (Sandbox Code Playgroud)
输出:“SELECT .... FROM ... WHERE id IN ('key1','key2')”
简单的解决方法是自己添加引号
for(var i=0; i<items.length; i++){
items[i] = "'" + items[i] + "'";
}
var list_with_quotes = items.join(",");
Run Code Online (Sandbox Code Playgroud)
请注意,我完全忽略了SQL注入问题.
| 归档时间: |
|
| 查看次数: |
34262 次 |
| 最近记录: |