PHP で MySQL から整数と数値を返す際の不一致を解決する
PHP を使用して MySQL からデータを取得する場合、困惑することがあります。整数列と数値列が文字列として返されるという型の不一致が発生します。
ドライバーの問題
データベース接続に使用されている基礎となるドライバーを特定することが重要です。この問題は多くの場合、ネイティブ MySQL ドライバーの使用に起因しており、このドライバーには数値型を整数として返す機能がありません。
MySQLnd ドライバーの識別
次の手順に従ってください。ネイティブ MySQL ドライバーを使用して、php -i の出力を検査します。 pdo_mysql セクションに「mysqlnd」に関する記述がない場合は、ネイティブ ドライバーを使用している可能性があります。
MySQLnd ドライバーへの切り替え
解決策は次のとおりです。 mysqlnd ドライバーに切り替えると、数値型を正しく返すことがサポートされます。 Ubuntu では、これは次の方法で実現できます。
sudo apt-get remove php5-mysql sudo apt-get install php5-mysqlnd sudo service apache2 restart
PDO 設定
mysqlnd ドライバーがインストールされたら、次の PDO 設定が正しく設定されていることを確認します。
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
返品されました値
上記の手順を実装すると、MySQL クエリの結果は期待どおりの数値型を返します。
戻り値の例次のようになります:
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 サイトの他の関連記事を参照してください。