3

我正在尝试用 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 占位符?

4

1 回答 1

2

我认为您无法避免动态构建查询,但您仍然可以避免 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<$>、的文档链接<$

于 2013-05-10T06:50:58.797 回答