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를 사용해 보세요.
제 PC 환경의 mySQL을 Hosting 환경과 맞췄습니다.
WAMP64을 사용하는데 동일한 버전의 addon을 설치 했더니 새글 작성이 가능합니다.
DB 버전에 관계없이 저장이 되어야 할 것 같습니다.