【发布时间】:2020-11-27 06:33:35
【问题描述】:
例如我有这样的查询:
const rows = await db.query(
"SELECT * FROM $1 WHERE email = $2 AND password = $3",
[tableName, email, password]
);
它给了我一个语法错误。
【问题讨论】:
例如我有这样的查询:
const rows = await db.query(
"SELECT * FROM $1 WHERE email = $2 AND password = $3",
[tableName, email, password]
);
它给了我一个语法错误。
【问题讨论】:
这是不可能的,参数化查询仅适用于值(而不是文字),但不适用于 identifiers。您将需要构建 SQL 字符串:
const rows = await db.query(
`SELECT * FROM ${db.escapeIdentifier(tableName)} WHERE email = $1 AND password = $2`,
[email, password]
);
(假设dbis a PgClient)
如果您事先知道tableName 变量的可能值,您可能会逃脱而无需转义;如果你不这样做,你最好也明确指定架构。
【讨论】: