格式化 SQL 查询以避免 SQL 注入

Formatting SQL queries to avoid SQL Injection

我必须在 Node.js 应用程序中使用如下所示的 SQL 查询。

SELECT * FROM my_table
WHERE my_column IN ['name1','name2']

数组['name1','name2']由用户输入。有时它可能包含 2 个以上的名称。如何使用 pg-format 包格式化此查询以避免 SQL 注入?

IN 子句参数不应该用括号括起来吗? 无论如何,这里有一个使用 pg-format 格式化的例子,

var format = require('pg-format');
var sql = format("SELECT * FROM my_table WHERE my_column IN (%L, %L)", 'Alice', 'Bob'); // name1, name2
console.log(sql);

编辑 1: 使用数组的动态名称,

var format = require('pg-format');
var names = ['Alice', 'Bob', 'Charlie'];
var inCaluseStr = '(' + Array(names.length).fill('%L').join(',') + ')';
var sql = format.withArray("SELECT * FROM my_table WHERE my_column IN " + inCaluseStr, names);
console.log(sql);

希望对您有所帮助。