人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの型について質問です。

PDOの「fetch」や、PHPの標準関数である「mysql_fetch_array」で配列のデータを取得すると、
配列の中のデータが「int」にも関わらず、全て「string」の型になってしまいます。
これは仕様か何かでしょうか?

せっかく正しい型で保存されているのに、取り出したら全て「string」の型になってしまいます。
取り出した後、型を再定義すれば済むのですが、、それでは無駄が多すぎかと思います。

DBからデータをfetchしたとき、正しい型のデータも取得したいのですが、どうもうまくいきません。
何か良い方法はないでしょうか??

---------------以下参考---------------
■DBからデータを取得(PDOでの例)

$records = $stmt->fetch(PDO::FETCH_ASSOC);

■試しに、その後すぐvar_dumpしますと、配列の中のデータが全て「string」の型になっています。
var_dump($records);
die();

array
'id' => string '10' (length=2)
'aaa' => string '10' (length=2)
'bbb' => string '10' (length=2)

DBに保存してあるデータは間違いなくintの型で、もちろん型もきちんと定義しております。
また保存されるデータ自体も間違いなくint型で保存しています。

CREATE TABLE hoge(
id INT,
aaa INT,
bbb INT,
)TYPE = INNODB;


●質問者: uniuniko
●カテゴリ:インターネット
✍キーワード:aaa dB hoge innodb PHP
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● kent013
●60ポイント

http://www.php.net/~wez/pdo/pdo-spec.html

仕様というか,PHPはそういうものだと思います.

1.1.2. Data typing

As a "typeless" environment, PHP doesn't mind whether data is returned as integer, floating point or string; it can convert to the appropriate type as needed. This conversion process may cause loss in data fidelity in some cases, in particular when it comes to floating point numbers. The type of choice for PDO when binding or requesting data is to use the string type, as this has the best data fidelity.

Note that some database client library implementations don't provide the application with a means to specify their preferred data type, returning it in their own perception of the best native data type. For those drivers it would typically be wasted effort to convert to a string in the PDO driver layer, so the native type is passed up and returned to the script in that form.

The net result of this is that data is usually, but not always, returned as strings unless otherwise specified by the PHP script.

とあります.

◎質問者からの返答

なるほど、やはりPHPはあまり型は気にせず使った方がいいかもしれませんね、、

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ