이 질문이 Stack Overflow에서 몇 번 반복되는 것을 보았지만 문제를 충분히 탐구하지 못했습니다 (또는 적어도 나에게 도움이되는 방식으로)
문제는 DB 쿼리가 정수 열에 대해 PHP에서 정수 데이터 유형을 반환해야한다는 것입니다. 대신 쿼리는 모든 열을 문자열 유형으로 반환합니다.
결과가 문자열로 캐스트되지 않도록하기 위해 false 이면 "PDO :: ATTR_STRINGIFY_FETCHES" 를 확인했습니다.
내가 본 답변 :
- 할 수 없어
- 아니요, Mac OS X에 설치된 PHP / MySQL에서 작동합니다.
- 코드의 모든 값을 형변환하십시오.
- 아니, 안 할거야
- 그것에 대해 걱정하지 마십시오. PHP는 느슨하게 입력됩니다.
- 내 데이터는 JSON으로 출력되고 다른 많은 서비스에서 사용되며 일부는 올바른 형식의 데이터가 필요합니다.
내 연구를 통해 이것이 드라이버 구현 문제라는 것을 이해합니다.
많은 출처에서 MySQL 기본 드라이버가 숫자 유형 반환을 지원하지 않는다고 주장합니다. 이것은 Mac OS X에서 작동하기 때문에 사실이 아닌 것 같습니다. " Linux 의 MySQL 기본 드라이버가이 기능을 지원하지 않는다 "는 뜻이 아니라면 말입니다 .
이것은 내가 Mac OS X에 설치 한 드라이버 / 환경에 특별한 것이 있음을 의미합니다. 수정 사항을 적용하기 위해 차이점을 식별하려고 노력했지만 이러한 사항을 확인하는 방법에 대한 지식이 제한되어 있습니다.
차이점들:
- OS X의 PHP는 Home Brew를 통해 컴파일 및 설치되었습니다.
- Ubuntu의 PHP는 "apt-get install php5-dev"를 통해 설치되었습니다.
- OS X의 PHP는 OS X에서도 실행되는 MySQL 서버에 연결됩니다.
- 서버 버전 : 5.1.71-log 소스 배포
- Ubuntu의 PHP가 Rackspace 클라우드 데이터베이스에 연결 중입니다.
- 서버 버전 : 5.1.66-0 + squeeze1 (Debian)
Ubuntu 환경
- 버전 : 10.04.1
- PHP 5.4.21-1 + debphp.org ~ lucid + 1 (cli) (빌드 : 2013 년 10 월 21 일 08:14:37)
php -i
pdo_mysql
MySQL 용 PDO 드라이버 => 활성화 된 클라이언트 API 버전 => 5.1.72
Mac OS X 환경
- 10.7.5
- PHP 5.4.16 (cli) (빌드 : 2013 년 8 월 22 일 09:05:58)
php -i
pdo_mysql
MySQL 용 PDO 드라이버 => 활성화 된 클라이언트 API 버전 => mysqlnd 5.0.10-20111026-$ Id : e707c415db32080b3752b232487a435ee0372157 $
사용 된 PDO 플래그
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
모든 도움과 전문 지식을 주시면 감사하겠습니다. :) 답을 찾으면 여기에 다시 게시 할 것입니다.