여분 필드가 있을 때 rss.php가 정상 작동 안됩니다.
본문
안녕하세요.
잘 사용하고 있던 rss.php인데,
경우에 따라서 rss가 나오지 않고
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
<channel>
<title>홈페이지 타이틀</title>
<link>도메인명</link>
<description>홈페이지 타이틀</description>
<language>ko</language>
</channel>
</rss>
이렇게만 보여진다고 오늘 낮에 문의글 남겼었습니다.
몇시간동안 이리저리 테스트를 하다가 드디어 원인(?)을 찾았습니다.
게시판 한곳에 wr_11, wr_12, wr_13 이렇게 여분필드를 사용하고 있는데,
DB에 여분필드를 생성했을 경우에 rss가 제대로 나오질 않네요.
제가 사용하는 rss.php 소스는 맨 아래 있습니다.
저 소스로 여분필드를 사용하더라도 rss 정상적으로 불러올 수 있는 방법이 있을까요?
지난글에도 썼지만 제가 사용하던 또 다른 rss.php는 여분필드가 있어도 정상적으로 rss 생성되는데,
다른 문제가 있어서 사용하지 않고 있습니다.
아시는 분 계시면 제발 답변 부탁드립니다.
감사합니다.
include_once "_common.php";
header("Content-type: text/xml;charset=utf-8");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
$limit = 100; // feed 생성 수
$buff = '';
$buff .= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>".PHP_EOL;
$buff .= '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >'.PHP_EOL;
$buff .= '<channel>'.PHP_EOL;
$buff .= '<title>'.$config['cf_title'].'</title>'.PHP_EOL;
$buff .= '<link>도메인명</link>'.PHP_EOL;
$buff .= '<description>'.$config['cf_1'].' '.$config['cf_title'].'</description>'.PHP_EOL;
$buff .= '<language>ko</language>'.PHP_EOL;
$Search = " where (1) ";
$Search .= " and wr_is_comment = 0 and wr_option NOT LIKE '%secret%' ";
$SelectBoard = " select bo_table,bo_subject from ".$g5['board_table']." where bo_use_search = 1 ";
$QueryBoard = sql_query($SelectBoard);
while($RowBoard = sql_fetch_array($QueryBoard)){ $ResultSelect[] = "( select *, '".$RowBoard['bo_table']."' as bo_table from ".$g5['write_prefix'].$RowBoard['bo_table'].$Search." )"; }
$ResultQuery = implode(" union all ", $ResultSelect);
$ResultQuery .= " order by wr_datetime desc limit 0 , $limit ";
$Query = sql_query($ResultQuery);
while($Row = sql_fetch_array($Query)){
$content = strip_tags($Row['wr_content']);
$content = str_replace(" "," ",$content);
$subject = strip_tags($Row['wr_subject']);
$subject = str_replace("/&/", "&", $subject);
$board = sql_fetch("select bo_subject from g5_board where bo_table = '".$Row['bo_table']."'");
$buff .= "<item>".PHP_EOL;
$buff .= "<title><![CDATA[[".$board['bo_subject']."] ".mb_strimwidth($subject,0,400,'..','utf-8')."]]></title>".PHP_EOL;
$buff .= "<link>".G5_URL."/".$Row['bo_table']."/".$Row['wr_id']."</link>".PHP_EOL;
$buff .= "<description><![CDATA[".mb_strimwidth($content,0,400,'..','utf-8')."]]></description>".PHP_EOL;
$buff .= "<author>".$Row['wr_name']."</author>".PHP_EOL;
$buff .= "<pubDate>".date("D, d M Y H:i:s T", strtotime($Row['wr_datetime']))."</pubDate>".PHP_EOL;
$buff .= "<guid>".G5_URL."/".$Row['bo_table']."/".$Row['wr_id']."</guid>".PHP_EOL;
$buff .= "</item>".PHP_EOL;
}
$buff .= "</channel>".PHP_EOL;
$buff .= "</rss>";
echo $buff;
답변 1
필드 개수가 다른 테이블끼리 union all 을 하는 과정에서 문제가 발생하는것 같습니다.
( select *, ... ) union all
위 케이스는 간단하게 다음처럼 재현 해볼수 있습니다.
-- 정상
(SELECT 1 wr_1, 2 wr_2 FROM DUAL) UNION ALL
(SELECT 3 wr_1, 4 wr_2 FROM DUAL)
;
-- 에러
(SELECT 1 wr_1, 2 wr_2 FROM DUAL) UNION ALL
(SELECT 3 wr_1, 4 wr_2, 5 wr_3 FROM DUAL)
;
답변을 작성하시기 전에 로그인 해주세요.