Я не могу заставить работать с Diesel на MariaDB - PullRequest
0 голосов
/ 09 марта 2019

Я просто хотел передать аргумент в свой 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 иДизель.

Я что-то пропустил?Спасибо.

1 Ответ

0 голосов
/ 10 марта 2019

Метод 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);

Но учтите, что вам следует избегать написания raw sql, если в этом нет необходимости.

...