我有AA類系列ID的一個陣列中,他們進入我的查詢,如:MySQL的安全
WHERE category IN(".implode(',',$categories))
現在出於安全目的,我想,以確保每個值來自數組實際上是一個整數。有沒有簡單的方法來做到這一點,或者我應該分解我的數組,(int)$ val每一個,然後再次構造數組?
謝謝!
馬特
我有AA類系列ID的一個陣列中,他們進入我的查詢,如:MySQL的安全
WHERE category IN(".implode(',',$categories))
現在出於安全目的,我想,以確保每個值來自數組實際上是一個整數。有沒有簡單的方法來做到這一點,或者我應該分解我的數組,(int)$ val每一個,然後再次構造數組?
謝謝!
馬特
可悲的是,這是不可能逃脫使用數據庫查詢的整體「in'部分。所以你有兩種可能性:
a)創建一個臨時表,插入並連接到原來的表。 (在可能的情況下是首選,你不用INT你想擁有在where
-clause的和你的工作非常大的數據集:
create temporary table yourTempTable (tempColumn varchar(42)) ENGINE=MEMORY;
SELECT FROM orig_table INNER JOIN yourTempTable ON category = tempColumn
二)從技術上說,這是你所建議的解決方案:建立查詢之前修改陣列。爲了使代碼更清晰可讀,我建議使用array_map。然後,只需修改代碼:
WHERE category IN(".implode(',',array_map($categories, function($a){return (int)$a;}))
在這裏,你得到所有返回值的新陣列consisisting的callable你提供的,這是在這種情況下,只是其中的每一個值強制轉換爲一個int的函數。這個數組直接輸入到implode
,所以你不需要任何新變量,全局函數,for
-loops或其他任何東西。
好的,謝謝我會試試! –
播下你的PHP腳本的完整片段 – Alex