質問: $result->fetch_assoc(); // 値を取得 > > : > > : 以下、文字列型から元の型に戻す処理 > > > fetch_fields()メソッドを実行すると 1. DBに都度問い合わせて各カラムの情報を取得してくる 2. クエリ実行時に既に各カラムの情報はPHP内に保存されていて、それを出力してる 上記の2通りだと思うのですが、実際どちらなのでしょうか? もし少しでもDBに負荷がかかるようならば、他を検討したいと思っています。宜しくお願いします。
回答: 調べる限りではこれだといつ根拠までは特定できなかったので、DB側のログで確認してもらうのが確実ですが... 恐らく2.の方法で行っているのではと考えられます。 そう判断した材料は以下の通り ・DBとの接続を伴う処理はmysqliクラスが担っている ・mysqli::queryメソッドで結果セット(mysqli_resultクラス)を返却している ・メタデータ(カラム情報など)は取得した結果セット内で管理している ・INSERTなどで結果セットが作成されない場合は、上記手法でメタデータを取得できない ・こちらのサンプルによると**DUAL**という擬似テーブルから取得した実在しないカラムについてもメタデータが取得されてること ただmysqli_resultクラス内部で、 SELECT句流し直してメタデータを取り直しなんかされてたら上の説は全く通用しませんが^^; 結局はDB側で発行されたクエリを監視して判断するのがベストです。