遇到MYSQL IN()函数问题

时间:2012-08-30 00:10:22

标签: php mysql pear

我正在为网站构建动态新闻应用程序。新闻将被分成几个类别,然后可能包含子类别(可能包含子类别)和新闻文章。我创建了一个递归函数来返回某个类别的所有子类别的所有类别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)

现在,我意识到我可以在prepare语句中填充查询的那一部分,但我觉得这会导致一些可能的攻击漏洞。我是否过于谨慎,因为数据不是用户生成的?有没有办法使这项工作?我的另一个想法是添加一个?对于每个ID,金额将在准备声明之前确定(在获得所有ID之后),但这对我来说很笨拙。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

array($myReturnedIDs)

产生一个单元素数组:

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

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

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

希望有所帮助!