質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.62%

  • PHP

    19758questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    5678questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

空の結果セットでも、カラム名を取得する方法

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,305

nezume

score 15

PHP から、MySQL サーバに対してクエリを実行し、
結果セットが空だった場合でも、カラム名を取得する方法はないものでしょうか。
(空じゃない場合、例えば mysqli だと fetch_field_direct を使えば取得できるのは知っています)

例)
person テーブル
id | name | blood_type_id
1 | ほげ | 1
2 | ほげほげ | 2

blood_type テーブル
id | name
1 | A
2 | B
3 | O
4 | AB

上記のようなテーブルがあったとして、下記のクエリを発行するとします。

select
    name, 
    blood_type.name as blood_type
from 
    person 
    inner join blood_type on person.blood_type_id = blood_type.id
where
    person.id = 3

当然結果セットは空ですが、ここで name、blood_type だけでも取れないものかと。
ご存知の方、いらっしゃいましたらご教授願えますでしょうか。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Stripe

    2015/07/28 20:47

    そもそも、何のために取得するんですか?クエリーの中に"name"や"blood_type"が含まれていますが?

    キャンセル

  • nezume

    2015/07/28 21:17

    フォームに用意すべき入力項目を、クエリの結果から自動生成できたらいいなと思いまして。投稿に書いたクエリには、カラム名を書いてますが、カラム未指定(select * とか)のケースも有りえます。

    キャンセル

回答 2

checkベストアンサー

+2

例えば PDO なら PDOStatement::getColumnMeta で取れないでしょうか?

$pdo = new PDO(...);
$sql = "...";
$stmt = $pdo->query($sql);
$count = $stmt->columnCount();
for ($i=0; $i<$count; $i++) {
    $c = $stmt->getColumnMeta($i);
    var_dump($c['name']);
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/28 22:35

    できました! ありがとうございます。

    結果セットが空だったので、カラム数も取れないだろうと思いこみ
    そもそも試していませんでした。
    やってみないとダメですね。
    助かりました。本当にありがとうございます。

    キャンセル

0

カラム名は結果セットとバインドされて帰って来るので、結果がゼロならなにも帰ってきません。
そもそもSQLでカラム名を指定しているということは、あらかじめカラム名がわかってるってことですよね?
どうして空のカラムのリストが帰ってほしいかお聞かせ願えませんか?

最初にarrayで作って置いて、結果があればそれで上書きでもいいような気がするんですが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/28 21:32

    情報の追加欄にも記載しましたが、結果セットから入力フォームを生成できたらいいな、
    と思いまして。

    「最初に配列を作っておいて〜」と言うのも考えなくはなかったんですが、
    クエリを変更した場合、配列も変更しなくてはなりません。
    かといって、配列からクエリを生成させるとなると、複数のテーブルを連結する場合
    少々ややこしくなります。

    ともあれ、入力フォームの生成ロジックを再考したほうが良さそうですね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Go言語の自前ソート関数を定義したい

    Go言語のsortについてお聞きします。 (以前、構造体のSortについてお聞きしました) c言語のqsortのように、自前で関数を定義して柔軟に ソートをすることは出来ませんか

  • 解決済

    Go言語で構造体を用いたソートがしたい

    Go言語について教えてください。 構造体を用いた場合の クラスのソート方法が分かりません。 サンプルコードを示して教えて頂けないでしょうか?

  • 解決済

    変数名の書き方が分からない

    セッションを受け取り、別の変数に代入し、input typeでブラウザ上に表示し、別のページにその入力された情報を送り表示させたいです。 ですが、変数名の書き方が悪いからか、エラ

  • 解決済

    MySQLのテーブル結合につきまして

    初歩的なご質問となり申し訳ございません。 php + mysql環境にて、 Table A ID  Product 01  car 02  water

  • 解決済

    ツリー構造(階層構造)のオブジェクトから要素を検索する方法

     やりたいこと 以下の様な、ツリー構造を想定したクラスが存在します。 public class Person { public string PersonId { ge

  • 受付中

    C# テーブルのクラス化

    C# 初心者です。 DBでテーブルを良く扱うことがあると思うのですが テーブルを素敵に管理できるクラス化+namespaceで整理したいです。 DB名をnamespa

  • 解決済

    【Android】データベース SQLiteについて【Java】

    AndroidStudioでアプリを作ろうと思っています。 アプリを作るにあたり、どうしても必要になるのがデータベースです。 Javaは基本が微妙に分かっている程度で

  • 解決済

    MySQLの複数条件検索

    WordpressにてMySQLのデータベースからデータを検索して 取り出す仕組みを作成しています。 二つのカラムに対してそれぞれ検索条件に一致する物を取り出し、 条件指定が無

同じタグがついた質問を見る

  • PHP

    19758questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    5678questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。