CI 묻고 답하기

제목 query() 실행 시 추가로 명시 하지 않은 NOT NULL 컬럼에도 자동으로 컬럼 타입에 맞게 값이 입력 이 됩니다.
카테고리 CI 2, 3
글쓴이 라파엘 작성시각 2021/08/08 16:29:40
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 8968   RSS

안녕하세요.

코드이그나이트 3 버전으로  공부를 하고 있습니다.

mySql 8.0 에서

아래와 같이 테이블 생성 후 

CREATE TABLE tb_day_info (
     day_idx bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '일련번호',
     code varchar(10) NOT NULL COMMENT '코드',
     code_title varchar(100) NOT NULL COMMENT '코드 명  ',
     start_day varchar(20) NOT NULL COMMENT '시작 날짜',
     end_day varchar(20) NOT NULL COMMENT '종료 날짜',
     create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '등록일',
     update_time datetime DEFAULT NULL COMMENT '수정일',
     PRIMARY KEY (day_idx),
     KEY tb_day_info_code (code)
) COMMENT='휴일정보테이블'

 $sql = " insert into tb_day_info set code = 'HO' " ;

 $this -> db -> query($sql)

실행 시 추가로 명시 하지 않은  NOT NULL 컬럼에도 자동으로 컬럼 타입에 맞게 값이 입력 이 됩니다.

NOT NULL 에러가 발생 하지 않습니다.

NOT NULL 에러를 발생 하게 하거나 체크 가능한 방법이 있을까요? 

코드이그나이터 한글. 메뉴얼 관련 내용을 찾아 보았으나 아래 내용 이 관련 있는 내용인가요? 

설정 파일에서 액티브레코드 비활성화는 아래 부분을 FALSE  처리 해야 하는 것가요?

$query_builder = TRUE;

데이터베이스 설정파일에서 액티브레코드를 비활성(disable)화 시킬수 있습니다.

경험적인 부분이나, 조언 부탁드립니다. 

고맙습니다.

 

 

 

 

 다음글 ci3 에서 콜렉션 어떻게 사용 하나요? (4)
 이전글 CI4 폴더이름변경 관련 질문드립니다. (4)

댓글

변종원(웅파) / 2021/08/09 08:22:11 / 추천 0

링크 확인하세요. ci의 문제가 아닙니다.

http://tcpschool.com/mysql/mysql_constraint_notNull

"NOT NULL 제약 조건이란 해당 필드에 NULL 값을 저장할 수 없도록 설정하는 것으로, 해당 필드를 생략하지 못하도록 하는 제약 조건은 아닙니다.

따라서 INSERT 문으로 레코드를 저장할 때 NOT NULL 제약 조건이 설정된 필드의 값을 생략할 수도 있습니다."

변종원(웅파) / 2021/08/09 08:34:10 / 추천 0

입력값은 프로그램에서 제어를 해야합니다.

컨트롤러에서 모델에서 입력에 필요한 값이 있는지 먼저 체크하고 모델에서 그 데이터를 기준으로 입력 array를 만듭니다.

전송된 POST 값을 체크 없이 모델에 직접 입력하는 것은 보안상 취약합니다. 그래서 폼 검증과 보안체크를 하고 입력문을 만들어서 입력하는게 좋습니다.

$lsArr = [
            'productId' => $data['productId'], //컨트롤러에서 받은 데이터
            'version' => $versionInfo['version'], //db에서 조회한 데이터
            'userNo' => $data['userNo'],
            'isTrial' => $data['isTrial'],
            'periodCode' => $pd, //컨트롤러에서 받은 데이터로 가공한 데이터
            'limitCount' => $data['limitCount'],
            'regDate' => $date //모델에서 선언한 날짜
        ];
        $this->db->insert('lise', $lsArr);

 

라파엘 / 2021/08/09 10:06:50 / 추천 0
무지에 대한 웅파님 답변 
감사하고 고맙습니다.