Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpDbPm 215 of 288 menu
◀ ▶

Параметры запроса в Rust

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

Найдем строку по ключу через метку:

use rusqlite::{Connection, params}; fn name_by_id(target: i64) -> Result<(), rusqlite::Error> { let conn = Connection::open("app.db")?; let mut stmt = conn.prepare("SELECT name FROM user WHERE id = ?1")?; let mut rows = stmt.query(params![target])?; if let Some(row) = rows.next()? { let name: String = row.get(0)?; println!("{}", name); } Ok(()) } fn main() { match name_by_id(2) { Ok(()) => {} Err(e) => println!("{}", e), } }

Метка ?1 получает первое значение из списка. Порядок меток и порядок значений должны совпадать.

Вставку тоже оформляют с метками, а не встроенным текстом имени:

use rusqlite::{Connection, params}; fn add_named(id: i64, label: &str) -> Result<(), rusqlite::Error> { let conn = Connection::open("app.db")?; conn.execute( "INSERT INTO user (id, name) VALUES (?1, ?2)", params![id, label], )?; Ok(()) } fn main() { match add_named(7, "gus") { Ok(()) => println!("saved"), Err(e) => println!("{}", e), } }

Дана таблица:

CREATE TABLE user ( id INTEGER PRIMARY KEY, name TEXT NOT NULL );

Выберите имя при id равном 3 через метку ?1 и выведите его.

Даны значения:

8 hana

Добавьте строку в user с двумя метками и выведите hana после успешной вставки.

Скажите, почему имя нельзя вставлять в текст запроса простой склейкой строк.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить