我正在尝试用 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/

10-13 08:21