2012-05-29 42 views
0

這可能有點奇怪的問題,但我試圖爲結果創建過濾器,但創建查詢的方式對我來說似乎有點奇怪。使用啓用/禁用過濾器變量的MySQL PDO創建SQL查詢

說我有5種類型的動物,默認情況下它會搜索所有類型的動物,但是您可以過濾它們。

所以說我們有貓,狗,爬行動物,鳥類,魚。我想過濾掉魚和鳥,我將如何建立一個查詢來注意到這一點?我真的必須爲每個可能的組合建立一個查詢嗎?這似乎有點荒謬。所有

例如查詢:

SELECT * FROM animals WHERE type = "dogs" OR type = "cats" OR type = "reptiles" OR type = "fish" OR type = "birds" 

回答

0

使用NOT IN運營商。例如,要過濾掉fishbirds

SELECT * FROM animals WHERE type NOT IN ('fish', 'birds') 
+0

奇妙的是,我仍然需要弄清楚如何正確地做到這一點與PDO,但這當然是一個更好的解決方案。謝謝。 – Ian

+0

@伊恩:看到[這個問題](http://stackoverflow.com/questions/4729679/passing-values-to-mysql-in-operation-in-pdo-prepared-statement)的想法如何通過這樣一個列入準備好的聲明。 – eggyal

0
$array = array('fish', 'birds'); 
$filter = implode(",", $array); 

"SELECT * FROM animals WHERE type NOT IN ($filter)" 

這樣你就可以動態地填寫您的數組並把它傳遞給SQL查詢。

+0

更好地將數組作爲參數傳遞給預處理語句,以確保其元素不會針對SQL進行評估。 – eggyal

+0

是的,仍然無法正常工作。我將其設置爲正確創建字符串爲$ limit =「'fish','birds'」,但是當我嘗試使用bindParam時,它失敗。如果我只是以$ limit的形式插入,效果很好。 – Ian