在ES6将Template String
引入JavaScript之后,进行价值插值非常狂热。当我们谈论构造字符串格式时,使用这种方法似乎并不有趣。
在舞蹈的构造中使用模板弦可以打开SQL注入的大门。我们有避免这种情况的方法。
使用client BigQuery para NodeJS,我将向您展示两种编写舞蹈的方法。
com模板字符串
// Params
const gender = "M";
const states = ["WA", "WI", "WV", "WY"]
.map((state) => `'${state}'`)
.join(", ");
// Query
const sqlQuery = `SELECT name, sum(number) as count
FROM \`<YOUR_TABLE_NAME>\`
WHERE gender = '${gender}'
AND state IN (${states});`;
// Run the query
const [rows] = await bigquery.query(sqlQuery);
console.log("Result -> ", rows);
com参数查询
参考:https://cloud.google.com/bigquery/docs/parameterized-queries
const gender = "M";
const states = ["WA", "WI", "WV", "WY"];
// Query
const sqlQuery = `SELECT name, sum(number) as count
FROM \`<YOUR_TABLE_NAME>\`
WHERE gender = @gender'
AND state IN UNNEST(@states);`;
const options = {
query: sqlQuery,
params: { gender, states },
};
// Run the query
const [rows] = await bigquery.query(options);
console.log("Result -> ", rows);
我们可以设置类型ð
// ...
const options = {
query: sqlQuery,
params: { gender, states },
types: {
gender: 'STRING',
states: ['STRING'],
},
};
// ...
使用参数化查询,我们以正确的方式使用客户端,就像BigQuery建议并避免使用SQL注入一样。
我希望我能为您提供帮助。