我正在尝试用 Database.HDBC.PostgreSQL 做这样的事情:
run c "update questions set deleted = now() where question_id in (?)" [toSql ids]
其中 ids 是 [Int]。但我得到了错误
No instance for (Data.Convertible.Base.Convertible [Int] SqlValue)
如何用 HDBC 填写 IN 占位符?
我认为您无法避免动态构建查询,但您仍然可以避免 SQL 注入等。
import Control.Applicative ((<$), (<$>))
import Data.List (intersperse)
let query = "update questions set deleted = now() where question_id in ("
++ intersperse ',' ('?' <$ ids)
++ ")"
in run c query (toSql <$> ids)
intersperse
、<$>
、的文档链接<$
。