sequelizeのバインドパラメータにSQL構文を入れたら、データ取得に失敗した
問題
sequelizeで下記のようなRawクエリでデータ取得しようとしたが失敗した。
const { QueryTypes } = require('sequelize');
const query = `
SELECT
FROM tests
WHERE status in ( $status )
`
await sequelize.query(
query,
{
bind: { status: "'1','2','3'" },
type: QueryTypes.SELECT
}
);
原因
クエリがデータベースに送信される前に、sequelizeによってreplacementsがエスケープされてクエリに挿入されますが、バインドパラメーターはSQLクエリテキストの外部でデータベースに送信されます。
bindパラメータにはSQLクエリの構文を入れないようにする必要がある。
対応
bindの代わりにreplacementsを使用した。