我正在尝试用 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 注入(inject)等。
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
、 <$>
、 <$
文档的链接。关于haskell - 如何使用 HDBC 填写 SQL IN 占位符的参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16472952/