datatype이 "SET"인 wr_option 처리

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
datatype이 "SET"인 wr_option 처리

QA

datatype이 "SET"인 wr_option 처리

본문

안녕하세요.

 

게시판에 새로운 글을 추가하면 호스팅에서는 잘되는데, 제 PC 환경에서는 안됩니다.

간략한 환경은...

Hosting: PHP 7.3.29, mysqlnd 5.0.12-dev

제 PC: PHP 7.4.26, mysqlnd 7.4.26

 

sql insert 문은 두 환경 모두 wr_option = ",," 식으로 문장이 만들어집니다.
 

그런데

저의 PC에서는 ERROR가 발생하고 

Hosting 환경에서는 SQL 문이 실행되고 테이블 컬럼에 등록된 값은 blank입니다.

 

wr_option = "html,," 일 경우

저의 PC에서는 ERROR가발생하고 

Hosting 환경에서는 SQL 문이 실행되고 테이블 컬럼에 등록된 값은 "html"입니다.

 

Table의 wr_option의 datatype이 SET이므로 문장이 위처럼 만들어지면 ERROR인 것 같은데,

어떻게 Hosting 환경에서는 콤마(,)가 사라지는 것일까요?

 

제 PC 환경에 문제가 있을까 싶어 Hosting에서 file과 DB를 backup받아서 제 PC에 설치해보았습니다만 마찬가지입니다.

 

write_update.php 를 보니, wr_option과 관련된 항목으로 


// 외부에서 글을 등록할 수 있는 버그가 존재하므로 비밀글은 사용일 경우에만 가능해야 함
if (!$is_admin && !$board['bo_use_secret'] && (stripos($_POST['html'], 'secret') !== false || stripos($_POST['secret'], 'secret') !== false || stripos($_POST['mail'], 'secret') !== false)) {
    alert('비밀글 미사용 게시판 이므로 비밀글로 등록할 수 없습니다.');
}
$secret = '';
if (isset($_POST['secret']) && $_POST['secret']) {
    if(preg_match('#secret#', strtolower($_POST['secret']), $matches))
        $secret = $matches[0];
}
// 외부에서 글을 등록할 수 있는 버그가 존재하므로 비밀글 무조건 사용일때는 관리자를 제외(공지)하고 무조건 비밀글로 등록
if (!$is_admin && $board['bo_use_secret'] == 2) {
    $secret = 'secret';
}
$html = '';
if (isset($_POST['html']) && $_POST['html']) {
    if(preg_match('#html(1|2)#', strtolower($_POST['html']), $matches))
        $html = $matches[0];
}
$mail = '';
if (isset($_POST['mail']) && $_POST['mail']) {
    if(preg_match('#mail#', strtolower($_POST['mail']), $matches))
        $mail = $matches[0];
}

 

그리고 아래는 관련 SQL 문 입니다.


    $sql = " insert into $write_table
                set wr_num = '$wr_num',
                     wr_reply = '$wr_reply',
                     wr_comment = 0,
                     ca_name = '$ca_name',
                     wr_option = '$html,$secret,$mail',  // 이하 생략

또는 


    $sql = " update {$write_table}
                set ca_name = '{$ca_name}',
                     wr_option = '{$html},{$secret},{$mail}', // 이하 생략

SQL 관련 코드는

insert) wr_option = '$html,$secret,$mail', 와

update) wr_option = '{$html},{$secret},{$mail}', 인데 내부 처리 과정/방법을 알 수 있을까요?

 

제 PC  환경에서 무엇을 체크해야 하는지 알려주시면 감사하겠습니다. 

이 질문에 댓글 쓰기 :

답변 2

https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html

sql_mode하고 관련이 있어 보입니다.

sql_query( "set sql_mode='' ");

이후 해당 query를 사용해 보세요.

말씀하신대로 먼저 정의하고 실행하니 진행이 되는군요.
그런데 다른 분들은 이런 문제가없었을까요?
sql_mode를 지우는 것은 다른 값을 집어 넣을때 발생하는 error들도 무시하게 되는 것 아닌가요?

sql_mode에는 많은 내용이 있습니마.
서버마다 기본 값이 다르기도 하고요.
SQL 문법을 얼마나 정확하게 쓰느냐,
 어떤 표준을 쓰는지에 대한 설정이 주요 내용입니다.

제 PC 환경의 mySQL을 Hosting 환경과 맞췄습니다.

WAMP64을 사용하는데 동일한 버전의 addon을 설치 했더니 새글 작성이 가능합니다.

DB 버전에 관계없이 저장이 되어야 할 것 같습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 766
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT