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

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

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

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2236閲覧

PHPでのmysqlからのデータ取得について

yoyoyoyogi

総合スコア47

MySQL

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2015/08/04 08:49

編集2015/08/04 09:10

phpとmysqlでwebページを作成しています。
dbからカラム名を含んで全てのデータをhtmlに出力しているのですが、一部のカラムを非表示にしたいのですが、やり方がわかりません。

以下のコードでやっていまして、tableに出力してます。
dbはカラム名が
id | coloum_1|coloum_2| coloum_3| coloum_5| coloum_6|coloum_7|
と、あって、例えばcoloum_7は表示したくない、でもSELECTで引っぱっては来たい、
という感じです。

while ($row = $stmt->fetch(PDO::FETCH_ASSOC )) {

// ヘッダ書き出し(一度だけ)
if (!isset($th)) {
print '<table><tr>';
foreach ($row as $key=>$value ) { printf('<th>%s</th>', $key); }
print '</tr>';
$th = true;
}

// 明細書き出し
print '<tr>';
$id = $row['id'];
foreach ($row as $key=>$value ) {
printf('<td><a href="?id=%s&colname=%s&value=%s">%s</a></td>', $id, urlencode($key), urlencode($value), htmlspecialchars($value, ENT_QUOTES));
}
print '</tr>';
} // whileループ終了
if (isset($th)) { print '</table>'; }

やりたい仕様
・カラム名も表示したい
・次ページへgetで、値とカラム名とidを渡したい
・一部のカラムとデータを非表示にしたい(が、値は取得して次ページへ渡したい)

わかりますでしょうか。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

元のコードをなるべく維持するのであれば while の先頭で次のように表示用の変数を別に設けて、

while ($row = $stmt->fetch(PDO::FETCH_ASSOC )) { $filteredRow = array_diff_key($row, array('coloum_7' => null));

表示するときは $filteredRow を foreach してやれば良いです。

foreach ($filteredRow as $key => $value ) { printf('<th>%s</th>', $key); }

$row は次のような連想配列なので、

php

1array( 2 'id' => 123, 3 'coloum_1' => "列1", 4 'coloum_2' => "列2", 5 'coloum_3' => "列3", 6 'coloum_5' => "列5", 7 'coloum_6' => "列6", 8 'coloum_7' => "列7", 9);

次のような配列を array_diff_key すると、

php

1array( 2 'coloum_7' => null, 3);

次のようになります。

php

1array( 2 'id' => 123, 3 'coloum_1' => "列1", 4 'coloum_2' => "列2", 5 'coloum_3' => "列3", 6 'coloum_5' => "列5", 7 'coloum_6' => "列6", 8);

要するに $rows['coloum_7'] を unset した新しい配列を作っているだけです。

ぶっちゃけ次のようにしても同じですしこの方が早いです。

php

1$filteredRow = $row; 2unset($filteredRow['coloum_7']);

投稿2015/08/04 09:43

編集2015/08/05 01:53
ngyuki

総合スコア4514

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

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

yoyoyoyogi

2015/08/05 01:46

ご回答ありがとうございます。 例のコード通りでバッチリ動きました、array_diff_key初めて知りました、ありがとうございます。 動きはしたのですが、検索して出てくるarray_diff_keyの使い方からは、教えて頂いた使い方が理解できませんでした。 (ちなみに、第一引数の配列とそれ以降の引数の配列を比べて、キーが重複しない物だけ抜き出す、と言った理解をしました。) 今後の応用の為に、今回の理屈といいますか、使い方の解説をお教え頂けると大変ありがたいのですが、お願い出来ないでしょうか。 よろしくお願いいたします。
ngyuki

2015/08/05 01:53

解説を追記しました
yoyoyoyogi

2015/08/21 02:59

おそくなりました。 ありがとうございました。 大変勉強になりました。
guest

0

sql

1SELECT id, coloum_1, coloum_2,coloum_3,coloum_4,coloum_5,coloum_6 FROM table ...

というように指定すればOKです。

投稿2015/08/04 09:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yoyoyoyogi

2015/08/04 09:11

ご回答ありがとうございます。 説明文がヘタで申し訳なかったのですが、値自体は取得して、次ページへ渡したいのです。 何かいい方法は無いでしょうか。
退会済みユーザー

退会済みユーザー

2015/08/04 09:17

次ページに渡すのが特定の値なのか、結果セットなのかイマイチわかりかねますが、セッションにでも保存するとか、遷移先にキーを渡して再度取得するのが定石だと思います。
yoyoyoyogi

2015/08/21 02:57

おそくなりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問