我无法在MariaDB上与Diesel进行约束性工作

问题描述 投票:0回答:1

我只是想将一个参数传递给我的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查询是正确的,因为当我替换“?”使用常量并删除“绑定”,我得到一个正确的结果。

我知道我可以将表映射到Rust结构,但我的目标是通过参数传递复杂的请求,所以我正在测试Rust和Diesel。

我错过了什么吗?谢谢。

mysql rust mariadb rust-diesel
1个回答
0
投票

bind方法不替换问号,它将值附加到查询的末尾。所以看起来应该是这样的:

let query = sql("SELECT resa_comment FROM reservation WHERE resa_id = ");
// ...

如果您需要在查询中间放置值,则需要链接bindsql调用,例如:

sql("SELECT resa_comment FROM reservation WHERE resa_id = ")
    .bind::<Integer, _>(1286)
    .sql(" AND something > ")
    .bind::<Integer, _>(1);

但请注意,如果没有必要,应该避免编写原始sql。

© www.soinside.com 2019 - 2024. All rights reserved.