rusqlite возвращает ошибку(InvalidParameterCount(1, 0))

#sqlite #rust #rusqlite

#sqlite #Ржавчина #rusqlite

Вопрос:

Я пытаюсь выполнить простой оператор sqlite с помощью rusqlite, но каждый раз получаю ошибку.

 let seconds = 1;

conn.execute(
    "DELETE FROM session WHERE created < DATETIME('now', '?1 seconds')",
    params![seconds],
)?;
  

возвращает Err(InvalidParameterCount(1, 0)) .

Если я использую статическую строку вместо параметра, запрос работает. Например.

 conn.execute(
    "DELETE FROM session WHERE created < DATETIME('now', '1 seconds')",
    params![seconds],
)?;
  

Как мне получить параметр там?

Ответ №1:

Вы пишете ?1 внутри строки, которая является не параметром, а обычной парой символов. Таким образом, когда вы указываете фактический параметр, он не соответствует, потому что в запросе нет никакого заполнителя параметра.

Вы хотите что-то вроде этого (непроверенное):

 let seconds = 1;

conn.execute(
    "DELETE FROM session WHERE created < DATETIME('now', ?1)",
    params![format!("{} seconds", seconds)],
)?;