次のようなクエリを実行しようとしています。
SELECT * FROM table WHERE id IN (1,2,3,4)
問題は、フィルター処理する ID のリストが一定ではなく、実行ごとに異なる必要があることです。ソースの信頼性に関係なく、実際にはクエリに含まれるすべてのものをエスケープしますが、信頼できないソースからのものである可能性があるため、ID もエスケープする必要があります。
node-postgres は、バインドされたパラメーターでのみ機能するようです: client.query('SELECT * FROM table WHERE id = $1', [ id ])
; これは、既知の数の値 ( ) があれば機能しますが、配列パラメーターの特別な処理がないように見えるためclient.query('SELECT * FROM table WHERE id IN ($1, $2, $3)', [ id1, id2, id3 ])
、配列を直接操作することはできません。client.query('SELECT * FROM table WHERE id IN ($1)', [ arrayOfIds ])
配列内のアイテムの数に応じてクエリ テンプレートを動的に構築し、ids 配列をクエリ パラメーター配列 (私の実際のケースでは、id のリスト以外のパラメーターも含まれています) に拡張することは、不当に負担がかかるようです。node-postgres は値のエスケープ メソッドを提供しないため、クエリ テンプレートで ID のリストをハードコーディングすることも実行可能ではないようです。
これは非常に一般的な使用例のように思われるので、実際には何かを見落としていると思いますがIN (values)
、node-postgres で一般的な SQL 演算子を使用できないというわけではありません。
私が上に挙げた方法よりも洗練された方法でこの問題を解決した人がいる場合、または node-postgres について本当に何かが足りない場合は、助けてください。