2012-03-12 130 views
-6

$ catIDs是值的意甲,显示如下:11,12,13,14,...SQL多个请求

在我的SQL请求,我把:WHERE c.IsActive = 1 AND c.PkID =' “ $ catIDs。””

,但它不与下面的代码只显示最后一个值(不是全部)

我尝试了爆炸消除接受多个参数

','并有一个简单的阵列用于

$result = doQuery("SELECT DISTINCT c.PkID, c.CategoryName 
         FROM " . HC_TblPrefix . "categories c 
         WHERE c.IsActive = 1 AND c.PkID = '" . $catIDs . "' 
         ORDER BY c.CategoryName"); 

    $donnee=explode(",",$catIDs); 

    for($i=0;$i<sizeof($donnee);$i++)  
    { 
     $resultCat = doQuery("SELECT c.PkID, c.CategoryName 
         FROM " . HC_TblPrefix . "categories c 
         WHERE c.IsActive = 1 AND c.PkID = '" . $donnee[$i] . "' 
         ORDER BY c.CategoryName"); 
    } 

     if(!hasRows($resultCat)) 
      return 0; 

     echo ' 
     <ul>'; 
     while($row = mysql_fetch_row($resultCat)){ 
      echo ' 
     <li><a itemprop="eventType" href="'/index.php?com=searchresult&amp;t='.$row[0].'" rel="nofollow">'.cOut($row[1]).'</a></li>'; 
     } 
     echo ' 
     </ul>'; 
+1

在MySQL中,可以使用IN。 ** xxx IN(a,b,c,...)** – Alfabravo 2012-03-12 19:31:43

+0

哪里有多个请求... ??? – Lion 2012-03-12 19:34:44

+0

$ catIDs的来源是什么?它是来自请求吗? – nnichols 2012-03-12 20:25:50

回答

3

试试这个:

$result = doQuery("SELECT DISTINCT c.PkID, c.CategoryName 
        FROM " . HC_TblPrefix . "categories c 
        WHERE c.IsActive = 1 AND c.PkID IN ('". implode("', '", explode(",", $catIDs)) ."') 
        ORDER BY c.CategoryName"); 

的原因,你的循环只返回最后的结果是因为您覆盖$resultCat每时间,所以当你的循环完成时,它只是最后一次循环迭代的结果。这真的不是一个很好的方式来做你想做的,反正。使用上面的解决方案。

+0

鉴于OP不清楚$ catID的结构,这可能是最安全的方法。 – MyItchyChin 2012-03-12 20:13:09

+0

假设这是用户输入,您应该再次在imploding之前用intval循环爆炸结果。 – nnichols 2012-03-12 20:24:16

+0

@nnichols:同意,假设这是用户输入。值得指出的是,对于任何输入消毒,应该使用'mysql_real_escape_string'来防止[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)。 – Travesty3 2012-03-13 12:42:01

0
SELECT DISTINCT c.PkID, c.CategoryName 
FROM " . HC_TblPrefix . "categories c 
WHERE c.IsActive = 1 AND c.PkID IN ('" . $catIDs . "') 

它已被格式化这样('1','4235','4312')

+0

这不会在每个条目之间放置单引号,因此您将搜索字符串“1,4235,4312”。 – Travesty3 2012-03-12 19:36:38

+0

strVar.Replace(“,”,“','”) – 2012-03-12 19:42:26

+0

这不是PHP - 'str_replace(“,”,“','”,$ catIDs)' – Travesty3 2012-03-12 19:46:01

1

如果$ catIDs是一个字符串,那么这就足够了。

$result = doQuery("SELECT DISTINCT c.PkID, c.CategoryName 
         FROM " . HC_TblPrefix . "categories c 
         WHERE c.IsActive = 1 AND c.PkID IN (" . $catIDs . ") 
         ORDER BY c.CategoryName"); 

如果$ catIDs是一个数组,那么这将工作。

$result = doQuery("SELECT DISTINCT c.PkID, c.CategoryName 
         FROM " . HC_TblPrefix . "categories c 
         WHERE c.IsActive = 1 AND c.PkID IN (" . implode(",", $catIDs) . ") 
         ORDER BY c.CategoryName"); 
+0

只需要指出(对于从本文中获得帮助的其他人),此解决方案对于查找整数值(其看起来像OP希望它)的工作状况良好,但这不适用于字符串值。为此,您需要用单引号括起每个以逗号分隔的值。 – Travesty3 2012-03-12 19:57:33