我正在爲一個站點構建動態新聞應用程序。新聞將被分解成可能包含子類別(可能包含子類別)和新聞文章的類別。我創建了一個遞歸函數來返回某個類別的所有子類別的所有類別ID。我想運行一個查詢來獲取遞歸函數返回的集合中的所有新聞帖子。在使用MYSQL IN()函數時遇到問題
當我嘗試使用這個(我使用PEAR DB)
//$myReturnedIDs is a comma delimited list of ids. 5,6,7,8,10,12
$oPrep = $oConn->prepare("SELECT NewsID FROM SiteNews WHERE NewsCategory IN (?)");
$oRes = $oConn->execute($oPrep, array($myReturnedIDs));
結果查詢是這樣的:
SELECT NewsID FROM SiteNews WHERE NewsCategory IN('5,6,7,8,10,12')
,而我需要它看起來像:
SELECT NewsID FROM SiteNews WHERE NewsCategory IN(5,6,7,8,10,12)
現在,我意識到我可以在prepare語句中填充查詢的那一部分,但我覺得這會導致一些可能的結果一個攻擊的漏洞。我是否過於謹慎,因爲數據不是用戶生成的?有什麼方法可以使這項工作?我的另一個想法是添加一個?對於每個ID,金額將在準備聲明之前(在獲得所有ID之後)確定,但對我來說感覺笨重。有什麼建議麼?
可能重複[PHP的PDO:我可以綁定一個數組到IN()條件?](http://stackoverflow.com/questions/920353/php-pdo-can-i-bind-an-array-條件) – 2012-08-30 00:17:22