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;

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2008/04/14 00:50:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:kent013 No.1

回答回数38ベストアンサー獲得回数7

ポイント60pt

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.

とあります.

id:uniuniko

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

2008/04/07 09:24:52

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません