我无法在 MariaDB 上使用 Diesel 进行绑定
I cannot make binding work with Diesel on MariaDB
我只是想向我的 sql 查询传递一个参数。
let query = sql("SELECT resa_comment FROM reservation WHERE resa_id = ? ");
let query2 = query.bind::<Integer, _>(1286);
let result : Result<std::vec::Vec<String>, _> = query2.load(&connection);
dbg!(result);
但是结果是
[src/bin/show_posts.rs:36] result = Err(
DatabaseError(
__Unknown,
"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near \'?\' at line 1"
)
)
SQL 查询是正确的,因为当我替换“?”时使用常数并删除 "bind",我得到了正确的结果。
我知道我可以将 table 映射到 Rust 结构,但我的目标是传递带有参数的复杂请求,所以我正在测试 Rust 和 Diesel。
我错过了什么吗?谢谢
bind
方法不替换问号,它将值附加到查询的末尾。所以它应该是这样的:
let query = sql("SELECT resa_comment FROM reservation WHERE resa_id = ");
// ...
如果需要在查询的中间放值,那么需要链式调用bind
和sql
,如:
sql("SELECT resa_comment FROM reservation WHERE resa_id = ")
.bind::<Integer, _>(1286)
.sql(" AND something > ")
.bind::<Integer, _>(1);
但请注意,如果没有必要,您应该避免使用原始格式 sql。
我只是想向我的 sql 查询传递一个参数。
let query = sql("SELECT resa_comment FROM reservation WHERE resa_id = ? ");
let query2 = query.bind::<Integer, _>(1286);
let result : Result<std::vec::Vec<String>, _> = query2.load(&connection);
dbg!(result);
但是结果是
[src/bin/show_posts.rs:36] result = Err(
DatabaseError(
__Unknown,
"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near \'?\' at line 1"
)
)
SQL 查询是正确的,因为当我替换“?”时使用常数并删除 "bind",我得到了正确的结果。
我知道我可以将 table 映射到 Rust 结构,但我的目标是传递带有参数的复杂请求,所以我正在测试 Rust 和 Diesel。
我错过了什么吗?谢谢
bind
方法不替换问号,它将值附加到查询的末尾。所以它应该是这样的:
let query = sql("SELECT resa_comment FROM reservation WHERE resa_id = ");
// ...
如果需要在查询的中间放值,那么需要链式调用bind
和sql
,如:
sql("SELECT resa_comment FROM reservation WHERE resa_id = ")
.bind::<Integer, _>(1286)
.sql(" AND something > ")
.bind::<Integer, _>(1);
但请注意,如果没有必要,您应该避免使用原始格式 sql。