php 5.3.x 에서 php 7.4.x 업그레이드 후 그누보드5 DB insert 오류 문의드립니다. 채택완료
서버를 이전하고 데이터 및 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개
답변에 대한 댓글 2개
mysql> set GLOBAL sql_mode = '';
mysql> set SESSION sql_mode = '';
실행후에 정상적으로 동작하고 있습니다.
도움 주셔서 감사드립니다!
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
살펴 보도록 하겠습니다.