MySQL 숫자 열이 PHP에서 문자열로 반환되는 이유는 무엇이며, 정수 또는 부동 소수점으로 반환되는지 어떻게 확인할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-11-24 11:21:14
원래의
512명이 탐색했습니다.

Why are MySQL numeric columns returned as strings in PHP, and how can I ensure they are returned as integers or floats?

MySQL에서 정수 및 숫자 열을 PHP 정수 및 숫자로 반환하는 방법

문제 설명

일부 PHP 기반 애플리케이션에서 문제가 발생할 수 있습니다. MySQL 쿼리의 결과는 올바른 정수 또는 숫자 데이터 유형이 아닌 문자열로 반환됩니다. 이는 문자열 캐스팅을 방지하기 위해 PDO 속성 PDO::ATTR_STRINGIFY_FETCHES를 false로 설정했음에도 불구하고 발생합니다.

드라이버 고려 사항

MySQL 드라이버가 숫자 유형이 유효한지 여부를 결정하는 데 중요한 역할을 한다는 점에 유의하는 것이 중요합니다. 정수 또는 숫자로 반환됩니다. Linux의 MySQL 네이티브 드라이버와 같은 일부 드라이버는 이 기능을 완전히 지원하지 않습니다.

그러나 타사 저장소를 통해 Linux 배포판에 사용할 수 있는 mysqlnd 드라이버는 이 기능을 지원합니다. 이 기능을 지원합니다. PHP 환경에서 mysqlnd 드라이버가 사용되고 있는지 확인하는 것이 중요합니다.

Ubuntu에 mysqlnd 드라이버 설치

Ubuntu에서 기본 MySQL 드라이버를 mysqlnd로 전환하려면, 다음 단계를 따르십시오.

  1. 기본 드라이버 제거: apt-get 제거 php5-mysql
  2. mysqlnd 드라이버 설치: apt-get install php5-mysqlnd
  3. Apache 다시 시작: service apache2 restart

드라이버 확인 중 사용법

mysqlnd를 설치한 후 실행 중인지 확인하세요. php -i를 실행하여 사용됩니다. pdo_mysql 섹션에서 다음 항목을 찾으십시오.

PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
로그인 후 복사

PDO 설정

다음 PDO 속성이 올바르게 설정되었는지 확인하십시오.

  • PDO::ATTR_STRINGIFY_FETCHES : 문자열을 방지하려면 false로 설정하세요. casting.
  • PDO::ATTR_EMULATE_PREPARES: 성능을 향상하려면 false로 설정합니다.

반환된 값 유형

이러한 설정이 구성되면 MySQL은 숫자 유형을 다음과 같이 반환합니다. 다음은 다음과 같습니다.

  • 부동 소수점 유형(FLOAT, DOUBLE) PHP 부동소수형
  • PHP 정수형 정수 유형(INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT)
  • 고정 소수점 유형(DECIMAL, NUMERIC)을 문자열(값이 있는 bigint)로 64비트를 초과하면 다음과 같이 반환될 수도 있습니다. 문자열)

예를 들어 다음 PHP 코드는 예상되는 데이터 유형을 출력합니다.

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

$stmt = $pdo->prepare("SELECT * FROM table");
$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_OBJ);

echo "<pre class="brush:php;toolbar:false">";
print_r($row);
echo "
";
로그인 후 복사

출력:

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)
로그인 후 복사

위 내용은 MySQL 숫자 열이 PHP에서 문자열로 반환되는 이유는 무엇이며, 정수 또는 부동 소수점으로 반환되는지 어떻게 확인할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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