postgres 准备好的语句中的条件
Conditions in prepared statements in postgres
我需要在 postgres 的准备语句中添加一个条件。
伪代码(不起作用,引发错误“WHERE 的参数必须是布尔类型,而不是文本类型”):
if (nameFilter) {
whereParam = `name LIKE %${nameFilter}%`
} else {
whereParam = "true"
}
let query = prepare("SELECT * FROM users WHERE ", whereParam);
伪代码(有效但看起来很丑):
if (nameFilter) {
likeParam = `%${nameFilter}%`
} else {
likeParam = "%"
}
let query = prepare("SELECT * FROM users WHERE name LIKE ", likeParam);
出于某些原因(使用一堆 AND 查询真的很复杂)无法使用字符串进行操作,因此这无济于事
if (nameFilter) {
q = `SELECT * FROM users WHERE name LIKE `
} else {
q = "SELECT * FROM users"
}
let query = prepare(q, nameFilter);
希望有类似于SELECT * FROM users WHERE AND AND ...
的声明
有什么建议吗?
此查询适合您。
select * from users where
case
when coalesce(, '') = '' then true
else (name ~ )
end;
唯一可以作为参数传递的是常量;您不能传递 SQL 查询的一部分,例如 name LIKE '%pattern%'
.
所以如果你的查询真的每次都不一样,你必须在你的代码中构造 SQL 字符串,就像你说你“由于某些原因”不能这样做一样。
虽然很烦,但也没有别的办法
当您构建 SQL 语句时,请确保您永远不会像这样连接字符串:
sql = "SELECT * FROM users WHERE username ='" + username + "'"
因为这很容易受到 SQL 注入的攻击。
我需要在 postgres 的准备语句中添加一个条件。
伪代码(不起作用,引发错误“WHERE 的参数必须是布尔类型,而不是文本类型”):
if (nameFilter) {
whereParam = `name LIKE %${nameFilter}%`
} else {
whereParam = "true"
}
let query = prepare("SELECT * FROM users WHERE ", whereParam);
伪代码(有效但看起来很丑):
if (nameFilter) {
likeParam = `%${nameFilter}%`
} else {
likeParam = "%"
}
let query = prepare("SELECT * FROM users WHERE name LIKE ", likeParam);
出于某些原因(使用一堆 AND 查询真的很复杂)无法使用字符串进行操作,因此这无济于事
if (nameFilter) {
q = `SELECT * FROM users WHERE name LIKE `
} else {
q = "SELECT * FROM users"
}
let query = prepare(q, nameFilter);
希望有类似于SELECT * FROM users WHERE AND AND ...
有什么建议吗?
此查询适合您。
select * from users where
case
when coalesce(, '') = '' then true
else (name ~ )
end;
唯一可以作为参数传递的是常量;您不能传递 SQL 查询的一部分,例如 name LIKE '%pattern%'
.
所以如果你的查询真的每次都不一样,你必须在你的代码中构造 SQL 字符串,就像你说你“由于某些原因”不能这样做一样。
虽然很烦,但也没有别的办法
当您构建 SQL 语句时,请确保您永远不会像这样连接字符串:
sql = "SELECT * FROM users WHERE username ='" + username + "'"
因为这很容易受到 SQL 注入的攻击。