0

サイトの動的ニュース アプリケーションを構築しています。ニュースはカテゴリに分割され、サブカテゴリ (サブカテゴリが含まれる場合もあります) とニュース記事が含まれる場合があります。特定のカテゴリのすべてのサブカテゴリのすべてのカテゴリ ID を返す再帰関数を作成しました。単一のクエリを実行して、再帰関数によって返されたセットにカテゴリが含まれるすべてのニュース投稿を取得したいと考えています。

これを使おうとすると(I'M USING 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)

今、クエリのその部分を準備ステートメントに入力できることに気付きましたが、攻撃の可能性のある穴につながると感じています。データはユーザーが生成したものではないため、私は慎重すぎますか? これを機能させる方法はありますか?私の他の考えは、? を追加することでした。ID ごとに、量は prepare ステートメントの前 (すべての ID を取得した後) に決定されますが、それは私には扱いにくいと感じます。助言がありますか?

4

1 に答える 1

0

$myReturnedIDsそれはコンマ区切りの文字だと思います。したがって、この:

array($myReturnedIDs)

要素が 1 つの配列を生成します。

["5,6,7,8,10,12"]

その場合は、explodeを使用して必要な配列を作成します。

$oRes = $oConn->execute($oPrep, explode(",", $myReturnedIDs));

それが役立つことを願っています!

于 2012-08-30T00:15:59.033 に答える