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 가 가능한 페이지 구성은 아래와 같습니다.

Copy
mysql_query("INSERT INTO $LMS[callcenter_table] SET

call_id = '$call_id'

,call_pw = '$passwd'

,call_name = '$call_name'

,record_type = 'S'

",$LINK) or die(alert_msg("DB Insert Error"));

해당 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 페이지는 아래와 같습니다.

Copy
mysql_query("INSERT INTO $LMS[admin_table] SET

user_id = '$user_id'

,user_pass = '$passwd'

,user_level = '$user_level'

,user_status = '$user_status'

,name = '$name'

,tel = '$mobile' // php 5 에서는 없었던 구문을 추가 후 정상적으로 DB insert 가 되었습니다.

,mobile = '$mobile'

,email = '$email'

,regdate = now()

",$LINK) or die(alert_msg("DB Insert Error"));

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 칼럼 속성에 비교하여

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

Copy
mysql_query("INSERT INTO $LMS[tutor_table] SET

call_id = '$call_id'

,tu_type = '$tu_type'

,course_id = '$course_id'

,tg_id = '$tg_id'

,tu_id = '$tu_id'

,tu_pw = '$passwd'

,tu_name = '$tu_name'

,sex = '$sex'

,tu_character = '$ir1'

,profile = '$ir2'

,tu_intro = '$ir3'

,tu_status = '$tu_status'

,tu_regdate = now()

,tu_pic = '$tu_pic'

,tu_banner = '$tu_banner'

,home_yn = '$home_yn'

,tu_tel = '$tu_tel'

,tu_email = '$tu_email'

,main_pic = '$main_pic'

,main_mentor1 = '$main_mentor1'

,main_mentor2 = '$main_mentor2'

,tu_ord = '$tu_ord'

,pic1 = '$pic1'

,pic2 = '$pic2'

,pic3 = '$pic3'

,pic4 = '$pic4'

,main_txt = '$main_txt'

,main_txt2 = '$main_txt2'

,main_txt3 = '$main_txt3'

",$LINK) or die(alert_msg("DB Insert Error"));

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

Copy
mysql_query("INSERT INTO $LMS[tutor_table] SET

call_id = '$call_id'

,tu_type = '$tu_type'

,course_id = '$course_id'

,tg_id = '$tg_id'

,tu_id = '$tu_id'

,tu_pw = '$passwd'

,tu_name = '$tu_name'

,sex = '$sex'

,tu_character = '$ir1'

,profile = '$ir2'

,tu_intro = '$ir3'

,tu_status = '$tu_status'

,tu_regdate = now()

,tu_lastdate = now()

,del_yn_tu = 'N'

,tu_pic = '$tu_pic'

,tu_banner = '$tu_banner'

,home_yn = '$home_yn'

,tu_tel = '$tu_tel'

,tu_email = '$tu_email'

,main_pic = '$main_pic'

,main_mentor1 = '$main_mentor1'

,main_mentor2 = '$main_mentor2'

,tu_ord = '$tu_ord'

,pic1 = '$pic1'

,pic2 = '$pic2'

,pic3 = '$pic3'

,pic4 = '$pic4'

,new_yn = 'N'

,main_txt = '$main_txt'

,main_txt2 = '$main_txt2'

,main_txt3 = '$main_txt3'

,cnt_vod = '0'

,cnt_live = '0'

,cnt_sm = '0'

,npic1 = 'a'

,npic2 = 'a'

,npic3 = 'a'

,npic4 = 'a'

,npic5 = 'a'

,npic6 = 'a'

,npic7 = 'a'

,npic_main = 'a'

,npic_video = 'a'

,npic_video_img = 'a'

,npic_banner1 = 'a'

,npic_banner2 = 'a'

,npic_video_main = 'a'

,npic_intro = 'a'

,npic_share = 'a'

,tchCode = 'a'

",$LINK) or die(alert_msg("DB Insert Error"));

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 포인트

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

https://sir.kr/g5_tip/5764

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

답변에 대한 댓글 2개

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

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

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

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

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

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

답변에 대한 댓글 1개

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

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

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

로그인
🐛 버그신고