> 데이터 베이스 > MySQL 튜토리얼 > PHP MySQL 숫자 열 결과가 때때로 정수나 부동 소수점 대신 문자열인 이유는 무엇입니까?

PHP MySQL 숫자 열 결과가 때때로 정수나 부동 소수점 대신 문자열인 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-10 16:18:10
원래의
885명이 탐색했습니다.

Why are my PHP MySQL numeric column results sometimes strings instead of integers or floats?

MySQL에서 PHP의 정수 및 숫자를 유형으로 반환

PDO::ATTR_STRINGIFY_FETCHES를 false로 설정했음에도 불구하고 숫자 열이 발생하는 문제가 발생할 수 있습니다. 여전히 정수나 숫자 대신 문자열로 반환됩니다. 이 동작은 드라이버 구현 문제로 인해 발생하는 경우가 많습니다.

mysqlnd의 차이점

이 문제를 해결하는 열쇠는 mysqlnd를 활용하는 데 있습니다. PHP용 드라이버. php -i를 볼 때 pdo_mysql 섹션에 "mysqlnd"가 없으면 기본 드라이버가 대신 사용되고 있음을 나타냅니다.

mysqlnd 설치

Ubuntu에서는 php5-mysql 대신 php5-mysqlnd. 성공적인 전환을 보장하려면 다음 단계를 따르십시오.

  1. 이전 드라이버 제거: apt-get 제거 php5-mysql
  2. 새 드라이버 설치: apt-get install php5-mysqlnd
  3. Apache 다시 시작: apache2 서비스 재시작

mysqlnd 확인

php5-mysqlnd 설치 시, php -i는 이제 pdo_mysql 섹션에서 "mysqlnd"를 명시적으로 언급해야 합니다.

PDO 설정

올바른 데이터 처리를 보장하려면 다음 PDO 속성을 설정하세요.

  • PDO::ATTR_EMULATE_PREPARES: false
  • PDO::ATTR_STRINGIFY_FETCHES: false

반환된 값

올바른 드라이버와 설정을 사용하면 숫자 열이 적절한 PHP 유형으로 반환됩니다.

  • 부동 소수점 유형(FLOAT, DOUBLE): PHP 부동 소수점
  • 정수 유형 (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT): PHP 정수
  • 고정 소수점 유형(DECIMAL, NUMERIC): 문자열
    (참고: 64비트 부호 있는 int를 초과하는 BIGINT는 다음과 같이 반환됩니다. 64비트 시스템에서는 문자열입니다.)

의 경우 예를 들어 다음 데이터는 다음과 같습니다.

+-----------+-----------+----------+-------------+--------------+
| integer_col | double_col | float_col | decimal_col | bigint_col    |
+-----------+-----------+----------+-------------+--------------+
| 1          | 1.55      | 1.5      | 1.20        | 18446744073709551615 |
+-----------+-----------+----------+-------------+--------------+
로그인 후 복사

다음과 같이 반환됩니다.

object(stdClass)[915]
  public 'integer_col' => int 1
  public 'double_col' => float 1.55
  public 'float_col' => float 1.5
  public 'decimal_col' => string '1.20' (length=4)
  public 'bigint_col' => string '18446744073709551615' (length=20)
로그인 후 복사

위 내용은 PHP MySQL 숫자 열 결과가 때때로 정수나 부동 소수점 대신 문자열인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿