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

게시판 복사 오류 원인중 한 가지 처리 방법(wr_datetime, wr_1 등 컬럼의 데이터타입 변경후 발생한...)

· 1개월 전 · 258 · 2

우선, common.lib.php 을 변경하시는 것에 대한 책임은 지지 않습니다. 부디 저 같은 불편함을 겪으시는 분께 도움이 되었으면 하는 바램으로 정말 정말 오랜만에 팁게에 글을 남겨봅니다. 

혹시 아래의 방안이 추천할 만하다 싶으시면, 개발팀에서 common.lib.php 의 해당 함수 업그레이드를 해주시면 어떨지 모르겠습니다. 변경하시는 것의 결과에 대한 책임은 지지 않습니다. 부디 저 같은 불편함을 겪으시는 분께 도움이 되었으면 합니다. 

현대적 호스팅환경에서 게시판의 칼럼을 변경할 경우에 종종 생기게 되는 것 같습니다.... 

혹여나 테이블을 workbench 등으로 wr_1~wr_10 등 칼럼 데이터 타입을 int, text 등으로 바꾸려고하는데  alter 가 되지 않을 때가 있습니다.

대부분 wr_datetime default 값이 '0000-00-00 00:00:00' 초기에 되어있어서 (낮은 버전 호환성을 위해 넣어두신 듯) 이 칼럼 때문에 오류가 납니다.

저는 이때 default 값을 `CURRENT_TIMESTAMP()` 로 바꿔서 사용합니다.  

그런데, 이것 때문에 이렇게 wr_1~10 등의 칼럼을 바꾼 상태에서는 관리자의 게시판 메뉴에서 해당 게시판의 `게시판 복사`가 이뤄지지 않습니다. 

복사되었다고 오류도 없이 목록에는 보이지만, 실제로 DB에는 해당 `g5_write_게시판명`으로 생성된 테이블이 없습니다. 따라서 글을 써도 써지지 않고 관리자 게시판 목록에는 보이고 정신이 몽롱한 상태가 되는 것인데, 생성 sql문을 echo로 확인하다보니 원인을 알게 되었습니다. 

아래의 함수 때문인데요. 

create 구문에서 해당 칼럼의 default 값을 넣을 때 `싱글 쿼테이션(')`이 없어야하는데, 무조건 쿼테이션마크를 넣는 로직 때문에 생긴 것이었습니다. 해결하기 위해  `board_copy_update.php` 파일의 아래와 같은 곳의 함수명이 있는데 이 함수를 수정해주면 됩니다. 

 

// 게시판 테이블 생성
$sql = get_table_define($g5['write_prefix'] . $bo_table);
위의 $sql 변수가 새롭게 `g5_write_게시판이름` 으로 테이블을 만드는데, 거기에 오류가 생긴 것이었습니다. 

 

`common.lib.php` 1900~2000번째줄 사이에 있는 함수

 

// PHPMyAdmin 참고
function get_table_define($table, $crlf="\n")

 

이 함수 내부에 아래의 로직으로 조건문을 바꿔주시면 됩니다.

 

... 기존코드
if (isset($row['Default']) && $row['Default'] != '') {
    $default_value = strtoupper($row['Default']);
    
    // 'CURRENT_TIMESTAMP' 단어로 시작하면 붙이지 않도록 함.
    if (strpos($default_value, 'CURRENT_TIMESTAMP') === 0) {
        $schema_create .= ' DEFAULT ' . $row['Default'];
    } else {
        // 기존 코드
        $schema_create .= ' DEFAULT \'' . $row['Default'] . '\'';
    }
}
... 기존코드

 

아래의 빨간색 테두리 부분을 위 코드로 대체하면 됩니다. 

ps.

코드의 원인을 분석해달라고 재민이랑 조금 나누며 도움을 조금 받았습니다. ㅎㅎ;a

 

댓글 작성

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

로그인하기

댓글 2개

1개월 전

감사합니다 ^^

감사합니다.

게시글 목록

번호 제목
24318
24317
24315
24309
24294
24293
24277
24262
24260
24253
24251
24236
24233
24228
24226
24221
24214
24203
24201
24199
24196
24195
24194
24192
24191
24187
24185
24183
24172
24168