0

私のサイト フィードの RSS は、php 経由で生成されています。

mysql から投稿を取得するために使用するクエリは次のとおりです。

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

次に、このループを実行して XML フィードを生成します。

$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 には、最新の 2 つの投稿しかありません。

それはクエリで20に制限されていると思いました。

面白いことに、LIMIT 0, 1 を設定すると、最終フィードには想定どおり 1 つの投稿しかありません。しかし、それを 20 に上げると、投稿は 2 つしかなく、そのクエリには 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;
?>
4

1 に答える 1

1

その理由は

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

ここで$rowは 1 つの結果のみが割り当てられるため、以下のように使用します

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_*関数の使用は非推奨です。代わりにPDOorを使用してくださいMYSQLi

ここに良いpdoチュートリアルがあります

于 2012-10-18T17:48:54.817 に答える