createConnection()
またはcreatePool()
の引数に渡すオブジェクトの中にnamedPlaceholders = true
を記述する。
const mysql2 = require("mysql2");
(async () => {
const conn = await mysql2.createPool({
host: 'localhost',
user: 'root',
database: 'mysql',
namedPlaceholders: true, // <- ここ
}).promise();
const query = "SELECT User FROM user WHERE Host = :param"
const param = "localhost";
try {
const [row, fields] = await conn.query(query, { param });
console.log(row);
} catch (e) {
console.log(e);
}
return;
})();
promise化しない場合は上の方法でも公式リファレンス通りでもどちらでもOKです。
また、プレースホルダを有効にすると?
や??
は使えなくなります。
ですが?
や??
をプレースホルダに置き換えて上げれば2重配列やINSERT文のSET句は同様に展開されるので問題ないはずです。