질문 Q #20979
mysql 결과값중 int 값이 string으로 뽑히는 문제
아톰_ 2019-03-21 11:03:32

안녕하세요.

 

코드이그나이터 model내에서 쿼리를통해 ($this->db->get()->result_array())

결과값을 json으로 바로 리턴해주는 api가 하나 있다고했을때 mysql내에서는 int값으로 지정이 되있음에도 불구하고 모두 String 값으로 캐스팅이 되어버리는 현상때문에 질문드려요.

서버단에서 위 데이터에대해서 별다른 작업을 할 필요가 없음에도 불구하고 int인 값들을 하나하나 캐스팅을 하기위해 루프를 돌리는 작업이 들어가야 하는건가요?? 아니면 다른 방법이 있을까요?? 여기저기 검색을 해보다가 답을 못찾아 여기에 질문을 남기게 됐네요

 

감사합니다.

답변 2
#1 한대승(불의회상) 2019-03-21 11:11:45

코드이그나이터의 문제라기 보다 php mysql 결과 함수 설정 문제로 보입니다.

아래 링크를 확인해 보시면 설정을 통해 조정이 가능해 보이기는 합니다.

https://stackoverflow.com/questions/5323146/mysql-integer-field-is-returned-as-string-in-php

 

#2 아톰_ 2019-03-21 11:36:48

한대승님 답변 감사합니다.

저도 추가로 찾아봤는데 말씀하신것처럼 php mysqli 드라이버 설정 관련 문제인것같네요. 

우선 system -> database -> drivers -> mysqli -> mysqli_driver.php 파일의 mysqli 옵션 설정부분에 아래 설정을 추가해주니 정상 작동 됩니다. (183 line)

$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, TRUE);

 

한편 json_encode($data,JSON_NUMERIC_CHECK) 두번째 인자값을 넣어주는 해결책도 있어 사용해봤더니 DB에선 varchar 필드인데도 불구하고 실제 데이터는 숫자 형식이라면 이것또한 int값으로 캐스팅되는 문제가 있네요. 

같은 고민을 하시는분들도 참고하셨으면 좋겠네요

 

감사드립니다.!