2012-03-12 16 views
-6

$ catIDs値のセリエあり、このように表示:11,12,13,14、...SQL複数の要求

私は置く私のSQL要求について:c.IsActive = 1、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

+0

複数のリクエストはどこですか? – Lion

+0

$ catIDsの起源は何ですか?要求から来ていますか? – nnichols

答えて

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が$ catIDsの構造について明確でないことを考えれば、これはおそらく最も安全なアプローチです。 – MyItchyChin

+0

これは、ユーザー入力であると仮定して、再度爆音する前にintvalを使用して爆発の結果をループする必要があります。 – nnichols

+0

@nnichols:合意しました。これはユーザー入力と仮定します。また、入力サニタイズ化の場合、[SQLインジェクション](http://en.wikipedia.org/wiki/SQL_injection)を防ぐためにmysql_real_escape_stringを使用する必要があることを指摘しておきましょう。 – Travesty3

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

+0

strVar.Replace( "、"、 "'、" ") –

+0

これはPHPではありません - ' str_replace( "、"'、 '$ catIDs) ' – Travesty3

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