2009-11-04 38 views
2

有沒有辦法用(My-)SQL中的預準備語句選擇多個值?準備好SQL語句的地方有多個值?

我試圖從與IN-關鍵字表中選擇幾排的,是這樣的:

SELECT * 
    FROM table 
where id IN (1, 2, 3) 

的「1,2,3」應作爲語句的參數傳遞。 這是可能的PHP/PDO,或者我必須concaterate值並直接插入它的聲明(我有一個不好的感覺,因爲注射)。

+0

我認爲答案在這裏:[stackoverflow.com/MySQL準備的語句與一個可變大小的變量列表](http://stackoverflow.com/questions/327274/mysql-prepared-statements-with-a-variable-大小可變列表) – manji 2009-11-04 20:21:28

回答

1

如果你有那個來自用戶的「東西」的數組,你可以建立佔位符列表與array_fill,通過陣列上調用implode產生像"?, ?, ?, ..."的字符串。或者,您可以確保數組中的所有內容都是整數(例如,使用intval),並直接使用它來構建查詢。

-1

嘗試通過您在列表作爲aconcatenated字符串,做到這一點(不是很高性能的,但它應該工作:我想我看到喬爾Spolsky的使用這種技術的地方一個答案):

SELECT * FROM table where concat('|',id,'|') like '%|1|2|3|%' 
+0

我很想投票-1 ... :( – 2009-11-04 20:15:06

+0

-1)糟糕的主意。沒有辦法Joel建議這個。如果你的| 1 | 2 | 3 |值是動態的呢? – 2009-11-04 20:18:09

+0

now I'已經找到了它 - 他有28 upvotes它!http://stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause/337817#337817 – davek 2009-11-04 20:20:53

0

我會通過在一個整數數組中,然後執行String.Join將它們放在準備好的語句中。你不能注入任何東西到一個整數!