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

PHPで下記のようにmysqliクラスを使ってMySQLから取得した値は、全て文字列型になって返されるようですが、この返値をテーブルの各カラムで指定した型(INTなど)に自動的にあわせる方法はありませんでしょうか?

> $mysqli = new mysqli('127.0.0.1', 'user', 'password', 'database');
> $result = $mysqli->query('SELECT * FROM table WHERE id = 1');
> $data = $result->fetch_assoc();// 配列の値は文字列型になる

※PDOではなく、あくまでもmysqliクラスでの実装をお願いします

●質問者: wankodon
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pogpi
●30ポイント

intvalでint型にすればいいのではないでしょうか。


wankodonさんのコメント
できれば自動でやりたいのです。

2 ● a-kuma3
●70ポイント ベストアンサー

fetch_field メソッドなどで、型の情報などが取得できます。それの type で判定してキャストしてあげるしかないと思います。
http://php.net/manual/en/mysqli-result.fetch-field.php
http://php.net/manual/en/mysqli-result.fetch-fields.php
http://php.net/manual/en/mysqli-result.fetch-field-direct.php

fetch_field メソッドが呼べる mysqli_result オブジェクトは query メソッドの戻り値でも良いですし、mysqli_stmt の result_metadata メソッドでも取得できます。
http://php.net/manual/en/mysqli-stmt.result-metadata.php

一回目に書くときは少々面倒ですけれど、fetch_fields の戻り値と fetch_assoc の戻り値を渡して、変換した値の配列を返す、というロジックは関数化できるので、使いまわしは効きます。


wankodonさんのコメント
自前で実装する必要があるということなんですね。 詳しい回答どうもありがとうございました。勉強になります。

a-kuma3さんのコメント
マニュアルを読んだ感じだと [http://php.net/manual/en/mysqli-result.fetch-object.php:title=fetch_object] メソッドが そのままの方で返してくれるのかな、という気もしたんですが、Stackoverflow でこんな質問がありましたので、どうやら返されるオブジェクトのプロパティは、全て文字列のようだと。 http://stackoverflow.com/questions/20059756/php-how-to-cast-properties-of-mysqli-result-fetch-object-based-on-mysql-type # php は不得手です <tt>(^^;</tt>

a-kuma3さんのコメント
<tt>×</tt> そのままの方で返して <tt>○</tt> そのままの型で返して <tt>X-|</tt>

wankodonさんのコメント
やはり自前の実装が必要なのですね。重ねてありがとうございました。
関連質問

●質問をもっと探す●



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