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

PHPからMySQLにSQLで問い合わせて受け取ったデータ内容は、すべて文字列として返されるのでしょうか?

例えば、MySQLのテーブルでIDのカラムをINTに指定した場合でも、PHP側で受け取った時は、文字列して返されてしまいます。

PHP側で対策すれば済む話ですが、もしINTでそのまま渡すやり方などありましたら教えて下さい。

●質問者: xxmasaxx
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:MySQL PHP SQL カラム データ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● deflation
●100ポイント

PHPからMySQLにSQLで問い合わせて受け取ったデータ内容は、すべて文字列として返されるのでしょうか?

いいえ、違います。

MySQLのINT型のデータはPHPにintegerとして渡されます。

MySQLのINT型のカラムを $i に代入したとすると、その直後に $i + 1 の計算ができます。


PHPの変数はintegerとstringの区別をせずに扱うことができるので、ご質問のように感じられるのではないでしょうか。

◎質問者からの返答

MySQLから返ってきた値をvar_dump()で確認してみたらstring型だったので、ちょっと気になったので。

回答有り難うございます。参考にさせて頂きます。


2 ● Saigon
●100ポイント

PHPでどのMySQLドライバを使っているかによって挙動が変わるかと思いますが、mysql_connect や PDO の場合はMySQL でintなカラムは integer として取得されるはずです。

◎質問者からの返答

なるほど、ドライバによっても変わるのですね。ちなみに使ってるドライバはmysqliでした。

回答有り難うございます。


3 ● うぃんど
●100ポイント ベストアンサー

>INTでそのまま渡すやり方

mysql_fetch_field などで確認してみれば判りますが

結果セットのフィールドの型はINT型などとして認識することが出来ます

しかしながら、データベース側からの吐き出しが

(各種言語や環境での利用を考慮してか)テキストとなっていますので

データを受け取った変数は文字列型としてひとまず認識されます

文字列型として認識されても

計算式に組み込んでしまえば数値型として取り扱えてしまうので

とりあえず問題になることはないはずです

http://www.php.net/manual/ja/language.types.type-juggling.php

PHP は、変数定義時に明示的な型定義を必要と(または、サポート) しません。ある変数の型は、その変数が使用される文により定義されます。 これは、ある文字列を変数 var に代入した場合には、 var は文字列になることを意味しています。 ある整数値を var に代入した場合には、 その変数は整数になります。

どのような理由でINT型にしておきたいのかはわかりませんが

どうしても変数をINT型としておきたい場合は(面倒ですが)明示的にキャストしてやると良いでしょう

<?php
// MySQL
$con = mysql_connect(省略);
mysql_select_db(省略);
//
echo 'INTとTEXTフィールドを同時に求めた場合&lt;br />';
$res = mysql_query('SELECT id,title FROM j1');
echo mysql_fetch_field($res,0)->type . '<br />';
echo gettype(mysql_result($res,0,0)) . '<br />';
$a = mysql_fetch_row($res, 0); echo gettype($a[0]) . '<br />';
$a = (INT) mysql_result($res,0,0); echo gettype($a) . '<br />';
echo '<br />';
//
echo 'INTフィールドのみ求めた場合<br />';
$res = mysql_query('SELECT id FROM j1');
echo mysql_fetch_field($res,0)->type . '<br />';
echo gettype(mysql_result($res,0,0)) . '<br />';
$a = mysql_fetch_row($res, 0); echo gettype($a[0]) . '<br />';
$a = (INT) mysql_result($res,0,0); echo gettype($a) . '<br />';
echo '<br />';
//
$res = mysql_close($con);
◎質問者からの返答

つまり、データベース側からの出力は文字列型で、あとは受け取ったドライバ側で処理を行う、というわけですね。合点がいきました。

INT型にしたいのは、PHPでMySQLから返ってきた値を if($hoge === 0){}と厳密に比較する時の手間を省きたかったからです。

これからは仰るように明示的にキャストを行って対応したいと思います。回答どうも有り難うございました。

関連質問


●質問をもっと探す●



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