1

我想在我的应用程序中将 postgresql-simple 用于我的数据库访问层,我想知道动态构建我的 sql 查询的最佳方法是什么。我想要完成的一个简单示例如下:

用户有一系列过滤器可以应用于他们正在搜索的内容:

  • 宠物数量
  • 宠物名称
  • 宠物创建的时间
  • ETC

我应该如何处理组合过滤器,这样我就不会让自己容易受到攻击。我的第一直觉是我只需要担心字符串/文本数据,因为我可以检查输入的数字实际上是一个数字,并且提供的日期实际上是一个日期。使用以下格式:

makeNumberOfPetsFragment :: String -> Either String String
makeNumberOfPetsFragment candidate = 
  case createStatement of
   Left _ -> Left "Error creating number of pets filter"
   Right x -> Right ("WHERE number_of_pets = " ++ (show x)) 
  where createStatement = readEither candidate :: Either String Int 

我不确定这是否只是一种不好的方法,或者仅使用现有库是否会更好,或者在我没有考虑的预制语句中是否有更好的方法。

4

0 回答 0