0

以下のコードは私のsitemap.xmlファイルの一部です。私の目的は、承認された記事の最終更新日を書くことです。このデータには 2 つの可能性があります。

  1. 記事に承認されたコメントがない場合lastmodは、記事の承認日です。
  2. 記事に少なくとも 1 つの承認済みコメントがある場合lastmod、最後に承認されたコメントの承認日です。

私の出力のエラーは次のとおりです。

  1. 私のデータベースにはコメントのない記事がいくつかありますが、これらのコメントのない記事は、他の記事の最後のコメントの承認日を取得します。その結果、今日承認されたコメントがいくつかあるため、それらのコメントのない記事の最終モードはすべて今日の日付です。しかし、これらの記事はかなり古いものです。
  2. $newsql私の2番目のwhileループでは、画面に「newstmt prepare error」if ($newstmt = $connection->prepare($newsql))が表示されるため、一部が機能しません

訂正していただけますか?

ありがとう、よろしく

コード

<?php       
//if spesific article is approved then its last modification date = approval date of article
//if spesific article has approved comment(s), then modification date = approval date of its last comment
$sql = "SELECT col_author, col_title, col_approvaldate FROM articles WHERE col_status = ? ORDER by col_approvaldate DESC";

if ($stmt = $connection->prepare($sql)) 
{
    /* bind parameters */
    $stmt -> bind_param("s", $bindparam1);
    
    /* assign value */
    $bindparam1 = 'approved';
    
    /* execute statement */
    $stmt->execute();

    /* bind result variables */
    $stmt->bind_result($author, $title, $articledate);

    /* fetch values */
    while ($stmt->fetch()) 
    {
        //if exist, get approved newest comment approval date
        $newsql = "SELECT col_approvaldate FROM comments WHERE col_status = ? AND col_for_author = ? AND col_for_title = ? ORDER by col_approvaldate DESC LIMIT 1";
        if ($newstmt = $connection->prepare($newsql))
        {
            /* bind parameters */
            $newstmt -> bind_param("sss", $ybindparam1, $ybindparam2, $ybindparam3);
            
            /* give values */
            $ybindparam1 = 'approved';
            $ybindparam2 = $author;
            $ybindparam3 = $title;
            
            /* execute statement */
            $newstmt->execute();

            /* bind result variables */
            $newstmt->bind_result($commentdate);
            
            /* fetch values */
            $biggerdate = '';
            
            while ($newstmt->fetch())
            {                   
                // is there any approved comment for this article?
                if (!is_null($commentdate))
                {$biggerdate = $commentdate;}
            }
            /* close statement */
            $newstmt->close();                  
        }
        else {echo 'newstmt prepare error';}
        
        //print the result
        echo '<url>'."\r\n";
        echo "\t".'<loc>'.root_folder.urlencode('articles').'/'.urlencode(space_to_dash($author)).'/'.urlencode(space_to_dash(no_punctuation($title))).'</loc>'."\r\n";             
        //if there is no approved comment for this article
        if ($biggerdate == '') 
        {
            $biggerdate = $articledate;
        }
        $datetime = new DateTime($biggerdate);
        $biggerdate = $datetime->format('Y-m-d\TH:i:sP');
        echo "\t".'<lastmod>'.$biggerdate.'</lastmod>'."\r\n";
        echo '</url>'."\r\n";

    }
    /* close statement */
    $stmt->close();
    
}
?>
4

1 に答える 1