sqlite3にbind parameterを利用する(javascript)

JavaScript

クエリのパラメーターに’?’を利用して書いてる例が多いのですが、個人的には並び順に気を使わなくてはいけないこととパラメータが何かが明示的でないためにミスしやすいので使わないようにしています。

一般的にはparameterに名前を付けて利用することが多いと思います。
sqlite3でも同様で、$を使ってbind できます。

const db = new sqlite3.Database(dbFilePath); 
const stmt = db.prepare(`INSERT INTO tableName
            (id, name)
            VALUES($id, $name)`);
stmt.bind({
    $id: 1,
    $name: 'hoge'
});
stmt.run();
stmt.finalize();

//もしくは
stmt.run({
    $id: 1,
    $name: 'hoge'
});

stmt.finalize();

これはstatementを利用するケースですが、クエリ上で$idと指定することで、db.run / stmt.runの第2引数で渡すオブジェクトから必要な同名のプロパティの値を代入できます。

stmtの場合は.bind()でバインドだけを独立して行うこともできます。

コメント