ホームページ > データベース > 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 delete php5-mysql
  2. 新しいドライバーをインストールします: apt-get install php5-mysqlnd
  3. Apache を再起動します: service apache2 restart

mysqlnd の検証

php5-mysqlnd をインストールすると、php -i は pdo_mysql セクションで「mysqlnd」を明示的に言及する必要があります。

PDO設定

データが適切に処理されるように次の PDO 属性を設定します:

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

戻り値

正しいドライバーと設定を使用すると、数値列が適切な PHP タイプとして返​​されます:

  • 浮動小数点型 (FLOAT、DOUBLE): PHP floats
  • 整数型 (INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT): PHP 整数
  • 固定小数点型 (DECIMAL、NUMERIC): 文字列
    (注: BIGINT は超過64 ビットの signed int は 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート