2015-06-24 33 views
0

的司機我要算在我的城市的人與一些過濾我怎麼可以把一些過濾字符串到我的SQL在playframework與scalikejdbc

val filter = sex match{ 
    case "all"=>"" 
    case "men" => "where sex = 'men'" 
    case "women" => "where sex = 'women'" 
} 
sql""" 
    select * from users $filter 
    """.map{...}.apply 

但它是錯誤這樣

SELECT * FROM users 'where sex = 'women'' 

過濾器字符串只是一個我不需要的字符串。 我怎麼能解決這個問題?

+0

不能使用任意的地方子句和預處理語句。它會分析你的參數並自動選擇適當的類型來插入你的值(以保護你免受SQL注入等攻擊)。 – Peanut

回答

0

您可能需要使用兩個不同的查詢:

val results = sex match{ 
    case "all"=>sql""" 
    select * from users""".map{...}.apply 
    case _ => sql"""select * from users where sex = $sex""".map{...}.apply 
} 

或使用相應的參數:

val filter = sex match{ 
    case "all"=>"%" 
    case "men" => "men" 
    case "women" => "women" 
} 
sql""" 
    select * from users where sex = $filter 
    """.map{...}.apply 
+0

非常感謝。你的意思是沒有正確的方法來處理這個問題? –

+0

如果你用「整個」子句作爲參數「糾正」你的意思,那麼,是的。這是不可能的。 – Peanut

相關問題