MySQL の数値列が PHP で文字列として返されるのはなぜですか?また、数値列が整数または浮動小数点数として返されることを確認するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-24 11:21:14
オリジナル
527 人が閲覧しました

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 ドライバーはサポートしています。この機能をサポートします。 mysqlnd ドライバーが PHP 環境で使用されていることを確認することが重要です。

Ubuntu への mysqlnd ドライバーのインストール

Ubuntu でネイティブ MySQL ドライバーから mysqlnd に切り替えるには、次の手順に従ってください:

  1. ネイティブをアンインストールしますドライバー: apt-get delete 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 に設定します。キャスト。
  • PDO::ATTR_EMULATE_PREPARES: パフォーマンスを向上させるには false に設定します。

戻り値の型

これらの設定が構成されると、MySQL は数値型を次のように返します。

  • 浮動小数点型(FLOAT、DOUBLE) PHP float として
  • 整数型 (INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT) PHP 整数として
  • 固定小数点型 (DECIMAL、NUMERIC) 文字列 ( 64 ビットを超える値を持つ bigint も次のように返されることがあります。 strings)

たとえば、次の 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 中国語 Web サイトの他の関連記事を参照してください。

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