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과 관련된 항목으로
</p>
<p>// 외부에서 글을 등록할 수 있는 버그가 존재하므로 비밀글은 사용일 경우에만 가능해야 함
if (!$is_admin && !$board['bo_use_secret'] && (stripos($_POST['html'], 'secret') !== false || stripos($_POST['secret'], 'secret') !== false || stripos($_POST['mail'], 'secret') !== false)) {
alert('비밀글 미사용 게시판 이므로 비밀글로 등록할 수 없습니다.');
}</p>
<p>$secret = '';
if (isset($_POST['secret']) && $_POST['secret']) {
if(preg_match('#secret#', strtolower($_POST['secret']), $matches))
$secret = $matches[0];
}</p>
<p>// 외부에서 글을 등록할 수 있는 버그가 존재하므로 비밀글 무조건 사용일때는 관리자를 제외(공지)하고 무조건 비밀글로 등록
if (!$is_admin && $board['bo_use_secret'] == 2) {
$secret = 'secret';
}</p>
<p>$html = '';
if (isset($_POST['html']) && $_POST['html']) {
if(preg_match('#html(1|2)#', strtolower($_POST['html']), $matches))
$html = $matches[0];
}</p>
<p>$mail = '';
if (isset($_POST['mail']) && $_POST['mail']) {
if(preg_match('#mail#', strtolower($_POST['mail']), $matches))
$mail = $matches[0];
}</p>
<p>
그리고 아래는 관련 SQL 문 입니다.
</p>
<p> $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', // 이하 생략
또는
</p>
<p> $sql = " update {$write_table}
set ca_name = '{$ca_name}',
wr_option = '{$html},{$secret},{$mail}', // 이하 생략</p>
<p>
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를 사용해 보세요.
답변에 대한 댓글 2개
서버마다 기본 값이 다르기도 하고요.
SQL 문법을 얼마나 정확하게 쓰느냐,
어떤 표준을 쓰는지에 대한 설정이 주요 내용입니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
그런데 다른 분들은 이런 문제가없었을까요?
sql_mode를 지우는 것은 다른 값을 집어 넣을때 발생하는 error들도 무시하게 되는 것 아닌가요?