mysql - 我无法在 MariaDB 上使用 Diesel 进行绑定(bind)

标签 mysql rust mariadb rust-diesel

我只是想向我的 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)”,我得到了正确的结果。

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

我错过了什么吗?谢谢。

最佳答案

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。

关于mysql - 我无法在 MariaDB 上使用 Diesel 进行绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55075636/

相关文章:

php - 使用 PHP 将 mysqli_insert_id 插入单独的表中

mysql - MySQL 中何时使用单引号、双引号和反引号

mysql - SELECT * FROM WHERE 未找到所有记录

mysql - 在 mysql 查询中使用和/或有问题

rust - Rocket 每晚需要最低版本的 Rust,但已经安装了更高的稳定版本

rust - 如何在 0.9 中反转字符串?

mysql - MariaDB - 找不到 innodb_log_file_size

带加号的 Rust 宏重复

mysql - 导入非常大的 SQL 文件时的单次提交 (MySQL)

mysql - SQL:使用索引优化大表查询