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;
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はあまり型は気にせず使った方がいいかもしれませんね、、