我有以下程序:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Lib
import Control.Applicative
import Database.SQLite.Simple
import Database.SQLite.Simple.FromRow
data EmailField = EmailField String String String deriving (Show)
instance FromRow EmailField where
fromRow = EmailField <$> field <*> field <*> field
main :: IO ()
main = do
conn <- open "test.db"
r <- query conn "SELECT * from email where email match ?" (Only ("in.gr"::String)) :: IO [EmailField]
mapM_ print r
close conn
该表是使用fts5的虚拟sqlite表,其以下各列 (发件人,标题,正文) 如果我如上所述进行查询,则在执行程序时会收到以下消息:
SQLite3尝试执行s时返回ErrorError tep:fts5:“。”附近的语法错误。
在命令行的sqlite客户端中,我可以解决以下问题
select * from email where email match '"in.gr"'
我使用引号和双引号。如何使用sqlite-simple完成此操作?有没有更好的支持sqlite全文搜索的解决方案?如果我使用来自用户的输入,并且用户发送带有禁止字符的字符串,也会出现此消息。因此,我认为必须有一种通用的方式来编码或转义这些字符或其他字符。谢谢