繁体   English   中英

查询有很多结果行,但是当我遍历这些行时,我只有两个

[英]Query have lots of result rows but when i loop through those rows, i only get two

我的网站feed rss是通过php生成的。

我用来从mysql检索帖子的查询是:

$query = "select * from articles where status = 0 
          order by date desc LIMIT 0, 20";

然后我执行此循环以生成XML feed:

$results = mysql_query($query,$connection) or die(mysql_error());
$num_results = mysql_num_rows($results);

for ($i=0; $i < $num_results; $i++) 
{ 
  $row = mysql_fetch_assoc($results); 
  $date = strtotime($row['date']);
  $artdate = date('D, d M Y H:i:s O', $date);

  $rssfeed .= '<item>';
  $rssfeed .= '<title>' . utf8_decode($row['title']) . '</title>';
  $rssfeed .= '<link>'. $siteurl.'/article.php?id='.$row['id'] . '</link>';
  $rssfeed .= '<description>' . utf8_decode($row['resource']) . '</description>';
  $rssfeed .= '<guid>'. $siteurl.'/article.php?id='.$row['id'] . '</guid>';
  $rssfeed .= '<pubDate>' . $artdate . '</pubDate>';
  $rssfeed .= '</item>';
}

但是生成的最终xml只有最新的两个帖子。

思想上限制为20。

有趣的是,如果我将LIMIT设置为LIMIT 0,则最终供稿中只有1个帖子,因为它应该是这样。 但是,如果我将其提高到20,它只有2个帖子,并且在该查询中我有两个以上的帖子。

请问发生了什么?

完整的php代码:

<?php

header("Content-Type: application/rss+xml; charset=ISO-8859-1");

$cat = $_GET['cat'];

include ('config.php');

    $sitequery = 'select * from settings;';
    $siteresult = mysql_query($sitequery,$connection) or die(mysql_error());

    //Create site settings variables        
    $siteinfo = mysql_fetch_array($siteresult);
    $sitetitle = $siteinfo['title'];
    $siteurl = $siteinfo['url'];
    $logo = $siteinfo['logourl'];
    $statcode = $siteinfo['statcode'];

    if($cat) {
     $query = "select * from categories where id = ".$cat;
     $results = mysql_query($query,$connection) or die(mysql_error());
     $info = mysql_fetch_assoc($results);
     $cattitle = htmlspecialchars($info['name']);

     $rssfeed = '<?xml version="1.0" encoding="ISO-8859-1"?>';
     $rssfeed .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">';
     $rssfeed .= '<channel>';
     $rssfeed .= '<title>'.utf8_decode($cattitle).' - '.$sitetitle.'</title>';
     $rssfeed .= '<link>'.$siteurl.'</link>';
     $rssfeed .= '<description>'.$sitetitle.' RSS FEED</description>';
     $rssfeed .= '<language>pt-br</language>';
     $rssfeed .= '<copyright></copyright>';

    } else {
     $rssfeed = '<?xml version="1.0" encoding="ISO-8859-1"?>';
     $rssfeed .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">';
     $rssfeed .= '<channel>';
     $rssfeed .= '<title>'.$sitetitle.'</title>';
     $rssfeed .= '<link>'.$siteurl.'</link>';
     $rssfeed .= '<description>'.$sitetitle.' RSS FEED</description>';
     $rssfeed .= '<language>pt-br</language>';
     $rssfeed .= '<copyright></copyright>';
    }

    if (!$cat){
     $query = "select * from articles where status = 0 
                 order by date desc LIMIT 0, 20";
    } else {
     $query = "select * from articles where status = 0 
              and categoryid = ".$cat." OR parentid =  ".$cat." 
              order by date desc LIMIT 0, 20";
    }

    $results = mysql_query($query,$connection) or die(mysql_error());
    $num_results = mysql_num_rows($results);

/*  for ($i=0; $i < $num_results; $i++) { 
        $row = mysql_fetch_assoc($results); */

 while ($row = mysql_fetch_assoc($results)) 
 {

  $date = strtotime($row['date']);
  $artdate = date('D, d M Y H:i:s O', $date);

  $rssfeed .= '<item>';
  $rssfeed .= '<title>' . utf8_decode($row['title']) . '</title>';
  $rssfeed .= '<link>'. $siteurl.'/article.php?id='.$row['id'] . '</link>';
  /*
     $rssfeed .= '<description>' . htmlspecialchars($row['body']) . 
                 '</description>'; */
  $rssfeed .= '<description>' . utf8_decode($row['resource']) . '</description>';
  $rssfeed .= '<guid>'. $siteurl.'/article.php?id='.$row['id'] . '</guid>';
  $rssfeed .= '<pubDate>' . $artdate . '</pubDate>';
  $rssfeed .= '</item>';
 }

  $rssfeed .= '</channel>';
  $rssfeed .= '</rss>';

  echo $rssfeed;
?>

这是因为

for ($i=0; $i < $num_results; $i++) { 
$row = mysql_fetch_assoc($results);  

此处$row只分配了一个结果,因此如下使用

while( $row = mysql_fetch_assoc($results)){
     $date = strtotime($row['date']);
     $artdate = date('D, d M Y H:i:s O', $date);

    $rssfeed .= '<item>';
    $rssfeed .= '<title>' . utf8_decode($row['title']) . '</title>';
    $rssfeed .= '<link>'. $siteurl.'/article.php?id='.$row['id'] . '</link>';
    $rssfeed .= '<description>' . utf8_decode($row['resource']) . '</description>';
    $rssfeed .= '<guid>'. $siteurl.'/article.php?id='.$row['id'] . '</guid>';
    $rssfeed .= '<pubDate>' . $artdate . '</pubDate>';
    $rssfeed .= '</item>';

  }

mysql_*使用mysql_*函数,而应使用PDOMYSQLi代替

这是很好的pdo教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM