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

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

QA

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


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


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

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


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"));

 

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


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

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

https://sir.kr/g5_tip/5764

우선 $LMS[tutor_table] 에서 cnt_vod 이하 칼럼들은 필요없는 칼럼들이라 모두 삭제하였고

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

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

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

$LMS[callcenter_table]을 {} 로 감싸줘야하지 않을까요?
답변을 작성하시기 전에 로그인 해주세요.
전체 425
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT