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

php 5.3.x 에서 php 7.4.x 업그레이드 후 그누보드5 DB insert 오류 문의드립니다. 채택완료

JuncTionSetGrUm 4년 전 조회 4,172

서버를 이전하고 데이터 및 DB복제 및 db설정 변경도 완료하였습니다.

또한 기존에 php 5 버전에서 php 7 로 업그레이드 되면서

mysql -> mysqli 문법 변환에 해당되는

split -> explode 로 모두 변경하였습니다.

 

하지만 회원가입,글쓰기 등 insert 부분에 해당되는 페이지에서 DB insert error가 나옵니다.

오류 분석결과, 

수정없이 DB insert 가 가능한 페이지 구성은 아래와 같습니다.

</p>

<p>mysql_query("INSERT INTO $LMS[callcenter_table] SET</p>

<p>call_id = '$call_id'</p>

<p>,call_pw = '$passwd'</p>

<p>,call_name = '$call_name'</p>

<p>,record_type = 'S'</p>

<p>",$LINK) or die(alert_msg("DB Insert Error"));</p>

<p>

 

해당 DB 테이블의 속성은 이렇습니다.

Field       | Type          | Null | Key | Default | Extra | +-------------+---------------+------+-----+---------+-------+ | call_id     | varchar(20)   | NO   | PRI | NULL    |       | | call_pw     | varchar(20)   | NO   |     |         |       | | call_name   | varchar(30)   | NO   |     |         |       | | record_type | enum('S','C') | YES  |     | S       |       | | del_yn_call | enum('Y','N') | NO   |     | N  

-------------------------------------------------------------------------------------------

 

수정을 하여 적용한 DB insert 페이지는 아래와 같습니다.

</p>

<p>mysql_query("INSERT INTO $LMS[admin_table] SET</p>

<p>user_id = '$user_id'</p>

<p>,user_pass = '$passwd'</p>

<p>,user_level = '$user_level'</p>

<p>,user_status = '$user_status'</p>

<p>,name = '$name'</p>

<p><span style="color:#f39c12;"><strong>,tel = '$mobile' // php 5 에서는 없었던 구문을 추가 후 정상적으로 DB insert 가 되었습니다.</strong></span></p>

<p>,mobile = '$mobile'</p>

<p>,email = '$email'</p>

<p>,regdate = now()</p>

<p>",$LINK) or die(alert_msg("DB Insert Error"));</p>

<p>

tel 칼럼에서 Null 값이 NO로 되어 있고 default 값이 없으므로 insert 값을 추가하고 난 뒤에

정상적으로 DB insert 가 되었습니다.

 

해당 DB 테이블의 속성은 이렇습니다.

+-------------+-------------------+------+-----+---------------------+----------------+ | Field       | Type              | Null | Key | Default             | Extra          | +-------------+-------------------+------+-----+---------------------+----------------+ | uid         | int(6) unsigned   | NO   | PRI | NULL                | auto_increment | | user_id     | varchar(20)       | NO   |     |                     |                | | user_pass   | varchar(20)       | NO   |     |                     |                | | user_level  | enum('1','2','3') | NO   |     | 3                   |                | | user_status | enum('1','2')     | NO   |     | 1                   |                | | name        | varchar(20)       | NO   |     |                     |                | | tel         | varchar(20)       | NO   |     |                     |                | | mobile      | varchar(20)       | NO   |     |                     |                | | email       | varchar(20)       | NO   |     |                     |                | | del_yn      | enum('Y','N')     | NO   |     | N                   |                | | regdate     | datetime          | NO   |     | 0000-00-00 00:00:00 |                | +-------------+-------------------+------+-----+---------------------+----------------+  

하지만 위 사항에 맞게 DB 칼럼 속성에 비교하여

여러차례 수정해도 계속 에러가 나는 페이지가 있습니다.

</p>

<p>mysql_query("INSERT INTO $LMS[tutor_table] SET</p>

<p>call_id = '$call_id'</p>

<p>,tu_type = '$tu_type'</p>

<p>,course_id = '$course_id'</p>

<p>,tg_id = '$tg_id'</p>

<p>,tu_id = '$tu_id'</p>

<p>,tu_pw = '$passwd'</p>

<p>,tu_name = '$tu_name'</p>

<p>,sex = '$sex'</p>

<p>,tu_character = '$ir1'</p>

<p>,profile = '$ir2'</p>

<p>,tu_intro = '$ir3'</p>

<p>,tu_status = '$tu_status'</p>

<p>,tu_regdate = now()</p>

<p>,tu_pic = '$tu_pic'</p>

<p>,tu_banner = '$tu_banner'</p>

<p>,home_yn = '$home_yn'</p>

<p>,tu_tel = '$tu_tel'</p>

<p>,tu_email = '$tu_email'</p>

<p>,main_pic = '$main_pic'</p>

<p>,main_mentor1 = '$main_mentor1'</p>

<p>,main_mentor2 = '$main_mentor2'</p>

<p>,tu_ord = '$tu_ord'</p>

<p>,pic1 = '$pic1'</p>

<p>,pic2 = '$pic2'</p>

<p>,pic3 = '$pic3'</p>

<p>,pic4 = '$pic4'</p>

<p>,main_txt = '$main_txt'</p>

<p>,main_txt2 = '$main_txt2'</p>

<p>,main_txt3 = '$main_txt3'</p>

<p>",$LINK) or die(alert_msg("DB Insert Error"));</p>

<p>

 

위 부분에서 테이블 속성에 따라 추가한 구문은 아래와 같습니다.

</p>

<p>mysql_query("INSERT INTO $LMS[tutor_table] SET</p>

<p>call_id = '$call_id'</p>

<p>,tu_type = '$tu_type'</p>

<p>,course_id = '$course_id'</p>

<p>,tg_id = '$tg_id'</p>

<p>,tu_id = '$tu_id'</p>

<p>,tu_pw = '$passwd'</p>

<p>,tu_name = '$tu_name'</p>

<p>,sex = '$sex'</p>

<p>,tu_character = '$ir1'</p>

<p>,profile = '$ir2'</p>

<p>,tu_intro = '$ir3'</p>

<p>,tu_status = '$tu_status'</p>

<p>,tu_regdate = now()</p>

<p><span style="color:#f39c12;"><strong>,tu_lastdate = now()</strong></span></p>

<p><span style="color:#f39c12;"><strong>,del_yn_tu = 'N'</strong></span></p>

<p>,tu_pic = '$tu_pic'</p>

<p>,tu_banner = '$tu_banner'</p>

<p>,home_yn = '$home_yn'</p>

<p>,tu_tel = '$tu_tel'</p>

<p>,tu_email = '$tu_email'</p>

<p>,main_pic = '$main_pic'</p>

<p>,main_mentor1 = '$main_mentor1'</p>

<p>,main_mentor2 = '$main_mentor2'</p>

<p>,tu_ord = '$tu_ord'</p>

<p>,pic1 = '$pic1'</p>

<p>,pic2 = '$pic2'</p>

<p>,pic3 = '$pic3'</p>

<p>,pic4 = '$pic4'</p>

<p><span style="color:#f39c12;"><strong>,new_yn = 'N'</strong></span></p>

<p>,main_txt = '$main_txt'</p>

<p>,main_txt2 = '$main_txt2'</p>

<p>,main_txt3 = '$main_txt3'</p>

<p><span style="color:#f39c12;"><strong>,cnt_vod = '0'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,cnt_live = '0'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,cnt_sm = '0'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic1 = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic2 = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic3 = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic4 = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic5 = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic6 = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic7 = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic_main = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic_video = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic_video_img = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic_banner1 = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic_banner2 = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic_video_main = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic_intro = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,npic_share = 'a'</strong></span></p>

<p><span style="color:#f39c12;"><strong>,tchCode = 'a'</strong></span></p>

<p>",$LINK) or die(alert_msg("DB Insert Error"));</p>

<p>

default가 null로 지정된 칼럼들을 임의로 값을 넣어도 DB insert 에러가 나고 있습니다.

 

 

해당 DB 테이블의 속성은 이렇습니다.

+-----------------+---------------------------+------+-----+---------------------+----------------+ | Field           | Type                      | Null | Key | Default             | Extra          | +-----------------+---------------------------+------+-----+---------------------+----------------+ | idx             | int(6) unsigned           | NO   | PRI | NULL                | auto_increment | | call_id         | varchar(20)               | NO   |     | NULL                |                | | tu_type         | enum('1','2','3','4','5') | NO   |     | 3                   |                | | tg_id           | int(11)                   | NO   | MUL | NULL                |                | | tu_id           | varchar(20)               | NO   | UNI |                     |                | | tu_pw           | varchar(20)               | NO   |     |                     |                | | tu_status       | enum('1','2')             | NO   |     | 1                   |                | | tu_name         | varchar(30)               | NO   |     | NULL                |                | | tu_tel          | varchar(20)               | NO   |     | NULL                |                | | tu_email        | varchar(100)              | NO   |     | NULL                |                | | sex             | enum('M','W')             | NO   |     | M                   |                | | profile         | text                      | NO   |     | NULL                |                | | tu_character    | text                      | NO   |     | NULL                |                | | tu_intro        | text                      | NO   |     | NULL                |                | | tu_lastdate     | datetime                  | NO   |     | 0000-00-00 00:00:00 |                | | tu_regdate      | datetime                  | NO   |     | 0000-00-00 00:00:00 |                | | del_yn_tu       | enum('Y','N')             | NO   |     | N                   |                | | tu_pic          | varchar(100)              | NO   |     | NULL                |                | | tu_banner       | varchar(100)              | NO   |     | NULL                |                | | home_yn         | enum('Y','N')             | NO   |     | Y                   |                | | course_id       | int(10)                   | NO   |     | NULL                |                | | main_pic        | varchar(100)              | NO   |     | NULL                |                | | main_mentor1    | enum('Y','N')             | NO   |     | N                   |                | | main_mentor2    | enum('Y','N')             | NO   |     | N                   |                | | tu_ord          | int(10)                   | NO   |     | NULL                |                | | pic1            | varchar(100)              | NO   |     | NULL                |                | | pic2            | varchar(100)              | NO   |     | NULL                |                | | pic3            | varchar(100)              | NO   |     | NULL                |                | | pic4            | varchar(100)              | NO   |     | NULL                |                | | new_yn          | enum('Y','N')             | NO   |     | N                   |                | | main_txt        | varchar(50)               | NO   |     | NULL                |                | | main_txt2       | varchar(50)               | NO   |     | NULL                |                | | main_txt3       | varchar(50)               | NO   |     | NULL                |                | | cnt_vod         | int(10)                   | NO   |     | NULL                |                | | cnt_live        | int(10)                   | NO   |     | NULL                |                | | cnt_sm          | int(10)                   | NO   |     | NULL                |                | | npic1           | varchar(100)              | NO   |     | NULL                |                | | npic2           | varchar(100)              | NO   |     | NULL                |                | | npic3           | varchar(100)              | NO   |     | NULL                |                | | npic4           | varchar(100)              | NO   |     | NULL                |                | | npic5           | varchar(100)              | NO   |     | NULL                |                | | npic6           | varchar(100)              | NO   |     | NULL                |                | | npic7           | varchar(100)              | NO   |     | NULL                |                | | npic_main       | varchar(100)              | NO   |     | NULL                |                | | npic_video      | text                      | NO   |     | NULL                |                | | npic_video_img  | varchar(100)              | NO   |     | NULL                |                | | npic_banner1    | varchar(100)              | NO   |     | NULL                |                | | npic_banner2    | varchar(100)              | NO   |     | NULL                |                | | npic_video_main | varchar(200)              | NO   |     | NULL                |                | | npic_intro      | text                      | NO   |     | NULL                |                | | npic_share      | varchar(200)              | NO   |     | NULL                |                | | tchCode         | varchar(100)              | NO   |     | NULL                |                | +-----------------+---------------------------+------+-----+---------------------+----------------+  

그리고 default가 null인 값을 수정하기 위해 

ALTER TABLE lms_tutor ALTER COLUMN cnt_vod SET DEFAULT '';

명령어를 실행하였는데

ERROR 1067 (42000): Invalid default value for 'tu_lastdate'

 

datetime 속성으로 되어 있는 tu_lastdate 칼럼이 에러가 나오고 있는 상황입니다.

 

비슷한 경험으로 해결하신 분들의 고마운 도움을 받고자 글을 올렸습니다.

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

답변 2개

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

MySQL sql_mode 도 체크해보시기 바랍니다 

https://sir.kr/g5_tip/5764

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

답변에 대한 댓글 2개

J
JuncTionSetGrUm
4년 전
답변 해주셔서 감사합니다.
살펴 보도록 하겠습니다.
J
JuncTionSetGrUm
4년 전
우선 $LMS[tutor_table] 에서 cnt_vod 이하 칼럼들은 필요없는 칼럼들이라 모두 삭제하였고

mysql> set GLOBAL sql_mode = '';
mysql> set SESSION sql_mode = '';

실행후에 정상적으로 동작하고 있습니다.

도움 주셔서 감사드립니다!

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

4년 전
$LMS[callcenter_table]을 {} 로 감싸줘야하지 않을까요?
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

J
JuncTionSetGrUm
4년 전
그렇게 수정해 보았습니다만 에러가 해결되지 않았습니다.
답변 해주셔서 감사합니다.

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

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

로그인