2012-10-12 109 views
0

更新2 - 我设法做到这一点通过使用子查询,而不是有一个$ config变量与每个数字我添加一行到我的articles_category表有1或0,如果它包括1个像这样:pdo mysql php循环只返回1行

$db->sqlquery("SELECT a . * , c.`category_name` 
FROM `articles` a 
LEFT JOIN `articles_categorys` c ON c.`category_id` = a.`category_id` 
WHERE a.`active` =1 
AND a.`category_id` 
IN (
(

SELECT `category_id` 
FROM `articles_categorys` 
WHERE `show_in_rss` =1 
) 
) 
ORDER BY a.`date` DESC 
LIMIT ?", array($limit)); 

UPDATE1 - 我有一个部分的解决方案,我需要与第二位帮助(我甚至不知道这是怎么回事关于它的正确方法,但它的驾驶我坚果)。

如果我这样做;

$category_array = explode(',', $config['article_rss_categorys']); 

$in_sql = ''; 
$counter = 0; 
// count how many there are 
foreach($category_array as $cat) 
{ 


    if ($counter == 0) 
    { 
     $in_sql .= '?'; 
    } 

    else 
    { 
     $in_sql .= ',?'; 
    } 

    $counter++; 
} 

我可以在IN()中放入“$ in_sql”给我个人?它的工作原理。现在我需要找到一种方法将每个数字从$ config ['article_rss_categorys']内部查询到第二部分?

ORIGINAL;

$ db是我的数据库类/连接(所有功能都在这个类中)。

好了,所以这里是我的查询:

$db->sqlquery(" 
    SELECT a.*, c.`category_name` 
    FROM `articles` a LEFT JOIN `articles_categorys` c 
    ON c.`category_id` = a.`category_id` 
    WHERE a.`active` = 1 
    AND a.`category_id` IN (?) 
    ORDER BY a.`date` 
    DESC LIMIT ?", array($config['article_rss_categorys'], $limit) 
); 

我检查和$config['article_rss_categorys']设置及其0,1,2,4,6,7,也$limit设置和它的15

这是我的查询代码(由$ db调用的mysql类中);

try 
    { 
     $this->STH = $this->database->prepare($sql); 

     foreach($objects as $k=>$p) 
     { 
      // +1 is needed as arrays start at 0 where as ? placeholders start at 1 in PDO 
      if(is_numeric($p)) 
      { 
       $this->STH->bindValue($k+1, (int)$p, PDO::PARAM_INT); 
      } 
      else 
      { 
       $this->STH->bindValue($k+1, $p, PDO::PARAM_STR); 
      } 
     } 

     return $this->STH->execute(); 

     $this->counter++; 
    } 

    catch (PDOException $e) 
    { 
     $core->message($e->getMessage()); 
    } 

我测试查询在phpMyAdmin用正确的东西替换?和它的工作所以数据库是罚款。

然后我尝试取出并放出如此的结果;

while ($line = $db->fetch()) 
{ 
    // make date human readable 
    $date = $core->format_date($line['date']); 

    $output .= " 
     <item> 
      <title>{$line['category_name']} > {$line['title']}</title> 
      <link>http://www.prxa.info/index.php?module=articles_comments&amp;aid={$line['article_id']}</link> 
      <pubDate>{$date}</pubDate> 
      <guid>http://www.prxa.info/index.php?module=articles_comments&amp;aid={$line['article_id']}</guid> 
     </item>"; 
} 

这是我的提取代码(在由$ db调用的mysql类中);

public function fetch() 
{ 
    $this->STH->setFetchMode(PDO::FETCH_ASSOC); 
    return $this->STH->fetch(); 
} 

它只返回一行,最后一行。它应该循环遍历它们,最多可达15个。

我不明白为什么它只能得到一个?

+0

你尝试手动运行查询 - 只是为了确保它返回比1分的结果吗? – alfasin

+0

@alfasin他写道,他在phpmyadmin中测试它。 – Barmar

+0

yeps,错过了它... – alfasin

回答