我在 Rust 中遇到了 SQLx 的问题,当尝试执行标准查询之外的查询(如 SELECT、INSERT、UPDATE 和 DELETE)时,参数绑定会失败。
// This query works fine with parameter binding
let result = sqlx::query("SELECT * FROM my_table WHERE column = $1")
.bind("123")
.fetch_all(&conn)
.await?;
// This doesn't
let result = sqlx::query("CREATE VIEW my_view AS SELECT * FROM my_table WHERE column = $1")
.bind("123")
.execute(&conn)
.await?;
它不会引发任何错误,并且允许我绑定参数。但是,PostgreSQL 没有收到它,导致出现以下错误:
there is no parameter $1
是否有另一种方法可以完成此任务,而无需将参数直接注入查询字符串?我担心与此相关的潜在安全风险。
Postgres 不支持 DML 命令的参数。不幸的是,
CREATE VIEW AS SELECT
是DML命令。常用的DML命令 - CREATE
、DROP
、ALTER
没有执行计划,那么执行的方式就不一样了