mysql - 使用 mysql crate 时无法执行 MySQL 准备语句;参数未被替换

标签 mysql rust

我尝试使用 prep_execparams!类似于 Conn 示例中的宏,还有 prepare 然后是 execute来自 Stmt .

这个函数有效:

pub fn get(DB: Pool, name: &str) -> Option<Settings> {
    let mut ret: Option<Settings> = None;
    let mut stmt = DB.prepare("SELECT * FROM settings").unwrap();
    for row in stmt.execute().unwrap() {
        let mut row = row.unwrap();
        ret = Some(Settings {
            id: row.take("id").unwrap(),
            host: row.take("host"),
            name: row.take("name").unwrap(),
            value: row.take("value"),
        });
        break;
    }

    ret
}

但这不起作用,参数没有被替换:

pub fn get(DB: Pool, name: &str) -> Option<Settings> {
    let mut ret: Option<Settings> = None;
    let mut stmt = DB.prepare("SELECT * FROM settings WHERE name=?").unwrap();
    for row in stmt.execute((name)).unwrap() {
        let mut row = row.unwrap();
        ret = Some(Settings {
            id: row.take("id").unwrap(),
            host: row.take("host"),
            name: row.take("name").unwrap(),
            value: row.take("value"),
        });
        break;
    }

    ret
}

错误是

thread 'main' panicked at 'called Result::unwrap() on an Err value: MySqlError { ERROR 1064 (42000): 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 ' WHERE name=?' at line 1 }'

最佳答案

直接来自 documentation you linked .

let mut stmt1 = pool.prepare("SELECT ?").unwrap();

// just do not forget about trailing comma in case of arity = 1
for row in stmt1.execute((42,)).unwrap() {
    let cell = from_row::<u8>(row.unwrap());
    assert_eq!(cell, 42u8);
}

如果只有一个参数,请确保在 execute 中有尾随逗号。

关于mysql - 使用 mysql crate 时无法执行 MySQL 准备语句;参数未被替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40600826/

相关文章:

php - 如何按两列对MySQL进行排序?

docker - 使用 Docker 构建缓存 Rust 依赖项

rust - 在 Wasm 发生 panic 后,如何触发 Rust Mutex 的释放,以便将来的调用正常?

rust - 为什么 Rust 需要在 "impl"关键字之后进行泛型类型声明?

mysql - 如何将同一个表的 2 个 SQL 查询的结果集成到单个查询中?

php - 是否有快速 SQL 查询来删除重复行

rust - 如何更改 Rust 中 &Path 的第一个祖先?

rust - 如何将元素从盒装切片中移出,在此过程中消耗切片?

MySQL:查找值不断增加的ID

PHP - MySQL 查询拒绝执行