我需要在js中构建一个postgreSQL查询:
var value = "something";
var query = "INSERT INTO table VALUES ('" + value + "')";
因为变量"值"可以包含引号,我也通过修改我的原始代码使所有引号加倍:
var value = "something with quotes maybe";
var query = "INSERT INTO table VALUES ('" + value.replace("'", "''") + "')";
除非字符串值以引号开头,否则它适用于大多数情况。 如何解决"报价问题"如果引用是值的第一个字符?
答案 0 :(得分:1)
转义引号字符还有很多,请参阅SQL injection。
根据您使用的Javascript / Postgres库,可能会有一些SQL字符串转义功能,您可以使用。
但真正的解决方案是使用prepared statements,这完全消除了这个问题。
我不知道,如果存在这样的Javascript / Postgres库。但是如果有的话,你的陈述会变成这样的东西(这主要是模仿PHP或Java等语言的样子)
var value = "something with quotes maybe";
var sql = "INSERT INTO table VALUES (?)";
var stmt = conn.prepare(sql);
stmt.execute(value);
查看node-postgres和Parameterized queries and Prepared Statements,这将是
var value = "something with quotes maybe";
var sql = "INSERT INTO table VALUES ($1)";
client.query(sql, [value]);