RustのMySQLでparams!を使おうとしてcannot find macro `params!` in this scopeと言われたら

下記のようなコードを書いたら上手く動かない。

#[macro_use]
use mysql;
fn main() {
let pool = mysql::Pool::new("mysql://user:pass@host:3306/dbname").unwrap();
let mut stmt = pool.prepare(r"SELECT name FROM user WHERE user = :user AND pass = :pass").unwrap();
let test = stmt.execute( mysql::params! { "user" => &user, "pass" => &pass, });
// ..
}

マクロが存在しないため下記のようなエラーが出る。

error: cannot find macro `params!` in this scope
--> src/server.rs:511:23
|
200 |             .execute( mysql::params! { user => &user, pass => &pass, })
|                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)

useする際に、マクロも一緒に読み込むことで使えるようになった。

#[macro_use]
use mysql::{params};
fn main() {
let pool = mysql::Pool::new("mysql://user:pass@host:3306/dbname").unwrap();
let mut stmt = pool.prepare(r"SELECT name FROM user WHERE user = :user AND pass = :pass").unwrap();
let test = stmt.execute( mysql::params! { "user" => &user, "pass" => &pass, });
// ..
}

SQLを書く時は名前付きのプレースホルダを使うようにしている。?だと可読性が悪いかなと思って。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA