Stack Overflowでこの質問が数回繰り返されているのを見たことがありますが、問題を十分に調査するものはありません(または、少なくとも私に役立つ方法で)
問題は、DBクエリが整数列に対してPHPで整数データ型を返す必要があることです。代わりに、クエリはすべての列を文字列型として返します。
「PDO :: ATTR_STRINGIFY_FETCHES」の場合は、 結果が文字列にキャストされていないことを確認するために falseのを確認しました。
私が見た答え:
- できません
- いいえ、Mac OSXでインストールされたPHP / MySQLで動作します
- コード内のすべての値を型キャストします
- いいえ、私はそれをしません
- 心配しないでください、PHPは大まかに型付けされています
- 私のデータはJSONとして出力され、他の多くのサービスによって消費されます。正しい形式のデータが必要なものもあります。
私の調査から、これはドライバーの実装の問題であることがわかりました。
多くの情報源は、MySQLネイティブドライバーが数値型を返すことをサポートしていないと主張しています。Mac OS Xで動作するため、これは当てはまらないようです。「Linux上のMySQLネイティブドライバはこの機能をサポートしていない」と言わない限り。
これは、Mac OS Xにインストールしたドライバー/環境に何か特別なものがあることを意味します。修正を適用するために違いを特定しようとしていますが、これらを確認する方法の知識に制限があります。
違い:
- OS X上のPHPは、HomeBrewを介してコンパイルおよびインストールされました。
- Ubuntu上のPHPは、「apt-getinstallphp5-dev」を介してインストールされました
- OS X上のPHPは、OSX上でも実行されているMySQLサーバーに接続しています
- サーバーバージョン:5.1.71-ログソース配布
- Ubuntu上のPHPはRackspaceクラウドデータベースに接続しています
- サーバーバージョン:5.1.66-0 + squeeze1(Debian)
Ubuntu環境
- バージョン:10.04.1
- PHP 5.4.21-1 + debphp.org〜lucid + 1(cli)(ビルド:2013年10月21日08:14:37)
php -i
pdo_mysql
MySQL用PDOドライバー=>有効なクライアントAPIバージョン=> 5.1.72
Mac OSX環境
- 10.7.5
- PHP 5.4.16(cli)(ビルド:2013年8月22日09:05:58)
php -i
pdo_mysql
MySQL用PDOドライバー=>有効なクライアントAPIバージョン=> mysqlnd 5.0.10-20111026- $ Id:e707c415db32080b3752b232487a435ee0372157 $
使用されるPDOフラグ
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => false,
どんな助けや専門知識もいただければ幸いです:)答えが見つかったら、間違いなくここに投稿します。