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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

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

PHP

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

Q&A

解決済

2回答

4049閲覧

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

nezume

総合スコア21

MySQL

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

PHP

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

0グッド

0クリップ

投稿2015/07/28 09:27

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 だけでも取れないものかと。
ご存知の方、いらっしゃいましたらご教授願えますでしょうか。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Stripe

2015/07/28 11:47

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

2015/07/28 12:17

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

回答2

0

ベストアンサー

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

php

1$pdo = new PDO(...); 2$sql = "..."; 3$stmt = $pdo->query($sql); 4$count = $stmt->columnCount(); 5for ($i=0; $i<$count; $i++) { 6 $c = $stmt->getColumnMeta($i); 7 var_dump($c['name']); 8}

投稿2015/07/28 13:09

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nezume

2015/07/28 13:35

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

0

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

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

投稿2015/07/28 12:15

hintrarou

総合スコア162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nezume

2015/07/28 12:32

情報の追加欄にも記載しましたが、結果セットから入力フォームを生成できたらいいな、 と思いまして。 「最初に配列を作っておいて〜」と言うのも考えなくはなかったんですが、 クエリを変更した場合、配列も変更しなくてはなりません。 かといって、配列からクエリを生成させるとなると、複数のテーブルを連結する場合 少々ややこしくなります。 ともあれ、入力フォームの生成ロジックを再考したほうが良さそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問