테스트 사이트 - 개발 중인 베타 버전입니다

여분 필드가 있을 때 rss.php가 정상 작동 안됩니다. 채택완료

masahide 2년 전 조회 1,970

안녕하세요.

 

잘 사용하고 있던 rss.php인데, 

경우에 따라서 rss가 나오지 않고

<rss xmlns:dc="<a href="http://purl.org/dc/elements/1.1/"" target="_blank" rel="noopener noreferrer">http://purl.org/dc/elements/1.1/"</a> version="2.0">

<channel>

<title>홈페이지 타이틀</title>

<link>도메인명</link>

<description>홈페이지 타이틀</description>

<language>ko</language>

</channel>

</rss>

이렇게만 보여진다고 오늘 낮에 문의글 남겼었습니다.

https://sir.kr/qa/509379

 

몇시간동안 이리저리 테스트를 하다가 드디어 원인(?)을 찾았습니다. 

게시판 한곳에 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="<a href="http://purl.org/dc/elements/1.1/"" target="_blank" rel="noopener noreferrer">http://purl.org/dc/elements/1.1/"</a> >'.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개

채택된 답변
+20 포인트
2년 전

필드 개수가 다른 테이블끼리 union all 을 하는 과정에서 문제가 발생하는것 같습니다.

</p>

<p>( select *, ... ) union all</p>

<p>

 

위 케이스는 간단하게 다음처럼 재현 해볼수 있습니다.

</p>

<p>-- 정상</p>

<p>(SELECT 1 wr_1, 2 wr_2 FROM DUAL) UNION ALL 

(SELECT 3 wr_1, 4 wr_2 FROM DUAL)

;</p>

<p> </p>

<p>-- 에러</p>

<p>(SELECT 1 wr_1, 2 wr_2         FROM DUAL) UNION ALL 

(SELECT 3 wr_1, 4 wr_2, 5 wr_3 FROM DUAL)

;</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

m
masahide
2년 전
친절하신 답변 감사합니다.
그런데, 알려주실 내용으로 무엇을 어떻게 해봐야 하는지 전혀 감이 오질 않네요.
배르만
2년 전
asterisk (* 마크) 대신에 다음처럼 사용할 필드만 직접 나열해주는 작업이 필요할것 같습니다.
[code]
// ( select *,
( select wr_id, wr_subject, wr_name, wr_datetime, ...,
[/code]
m
masahide
2년 전
정말 감사합니다.
덕분에 해결하였습니다...^^

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인