0

我正在为一个站点构建一个动态新闻应用程序。新闻将被分成类别,然后可能包含子类别(可能包含子类别)和新闻文章。我创建了一个递归函数来返回某个类别的所有子类别的所有类别 ID。我想运行一个查询来获取其类别在递归函数返回的集合中的所有新闻帖子。

当我尝试使用它时(我正在使用 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,金额将在准备语句之前确定(在获取所有 ID 之后),但这对我来说感觉很笨拙。有什么建议么?

4

1 回答 1

0

我猜这$myReturnedIDs是一个逗号分隔的字符串。所以这:

array($myReturnedIDs)

产生一个单元素数组:

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

如果是这种情况,那么您想使用explode来制作您想要的数组:

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

希望有帮助!

于 2012-08-30T00:15:59.033 回答