IT 관련/Database

PHP+PDO 쿼리 결과 문자열(String)을 컬럼 타입에 맞게 반환

nullzone 2019. 12. 4.
반응형

PHP+PDO 쿼리 결과 문자열(String)을 컬럼 타입에 맞게 반환 


 

PHP +PDO를 사용하다 보면 뜻하지 않게 Database의 컬럼 타입과는 다르게 모든 쿼리 결과가 String으로 리턴되는 경우가 있다.

 

물론 데이터 insert, update시에 mysql, mariadb등은 data type이 맞지 않아도 큰 에러 없이 처리되다 보니 그냥 넘어가는 경우도 많기는 하다.

더구나 웹에서 많이 쓰이는 php, javascript 등의 스크립트 언어도 data type에 대해서 느슨하다 보니 그냥 그려려니 하는 경우도 있고 어떤때는 이게 오히려 편리 할때도 있다.

 

그러나, string '1' 과 integer 1은 엄연히 다른 데이터 이다.

PHP +PDO를 사용하면서 Database의 컬럼 타입과는 다르게 모든 쿼리 결과가 String으로 되지 않고, 원래 컬럼 타입으로 처리 하려면 아래의 내용들을 수정 해주면된다.

 

단... 이 경우 반드시 database의 data type에 맞추어서 코딩해야 한다.

 

php에서 mysql driver(?)가 php5-mysql인 경우 이를 제거 하고 php5-mysqlnd로 변경해준다.

 

ubuntu기준 

apt-get remove php5-mysql : php5-mysql 제거

apt-get install php5-mysqlnd : php5-mysqlnd 설치


PDO 설정
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

pdo 객체에서 위의 2가지 설정을 한다.

이제 pdo를 이용할때 모두 string으로 반환되는 결과 값들은

 
1. FLOAT, DOUBLE --> PHP 부동 소수점으로 리턴
2. INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT  --> PHP 정수로 리턴 
3. DECIMAL, NUMERIC --> PHP 문자열로 리턴

 

 

 

반응형

댓글