一部の PHP ベースのアプリケーションでは、次のような問題が発生する可能性があります。 MySQL クエリの結果は、正しい整数または数値データ型としてではなく、文字列として返されます。この問題は、文字列キャストを防ぐために PDO 属性 PDO::ATTR_STRINGIFY_FETCHES を false に設定しているにもかかわらず発生します。
数値型が数値型であるかどうかを決定する上で、MySQL ドライバーが重要な役割を果たしていることに注意することが重要です。整数または数値として返されます。 Linux 上の MySQL ネイティブ ドライバーなど、一部のドライバーはこの機能を完全にはサポートしていません。
ただし、サードパーティ リポジトリを通じて Linux ディストリビューションで利用できる mysqlnd ドライバーはサポートしています。この機能をサポートします。 mysqlnd ドライバーが PHP 環境で使用されていることを確認することが重要です。
Ubuntu でネイティブ MySQL ドライバーから mysqlnd に切り替えるには、次の手順に従ってください:
mysqlnd をインストール後、php -i を実行して使用されていることを確認します。 pdo_mysql セクションで次のエントリを探します:
PDO Driver for MySQL => enabled Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
次の PDO 属性が正しく設定されていることを確認します:
これらの設定が構成されると、MySQL は数値型を次のように返します。
たとえば、次の 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 サイトの他の関連記事を参照してください。