こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MySQLのテーブルのコラム名の取得方法

MySQLのテーブルを一つのオブジェクトと考えるようなクラスを作ろうとしています。
このクラスの中で、テーブルの各コラム(またはフィールド名)を要素にした配列を作りたいのですが、やり方がわかりません。
自分がある程度調べてみたところでは、MySQLシェルの中では、次のように入力すると添付した画面のようにコラム名の一覧が表示がされるのですが
これらのコラム名をPHPスクリプト内にある配列に格納出来ません。

mysql> SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME="transaction";

まだ作成の途中ですが、自分のスクリプトは以下に掲載したようなものです
// columnList initialize というブロックが該当部分です。ほかの部分はとりあえず働いてます。
どなたかお知恵を貸していただけないでしょうか。お願いいたします。

<?php
class Table{

private $DBname;
private $tableName;
private $columnList=array();
private $dataArray=array(array());
private $totalRecords;

//===================================================
public function __construct($database, $tablename)
//===================================================
{
$this->DBname=$database;
$this->tableName=$tablename;

$cxn=mysqli_connect("localhost","root","rsi2018","$database") or die("cannot connect to database");

// $columnList initialize
$query="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=\"$tablename\"";
$result=mysqli_query($cxn, $query) or die("query failed :1");
$row=mysqli_fetch_array($result);
foreach($row as $col){
$this->columnList[]=$col;
}

// $totalRecords initialize
$query="select count(*) as count from $tablename";
$result=mysqli_query($cxn, $query) or die("query failed :3");
$row=mysqli_fetch_array($result);
$this->totalRecords=$row["count"];

// $dataArray initialize
for($i=0; $i < $this->totalRecords; $i++){
$query="select * from $tablename where id=($i+1)";
$result=mysqli_query($cxn, $query) or die("query failed :2");
$this->dataArray[$i]=mysqli_fetch_assoc($result);
}

}// end constructor

//===================================================
public function showPart($id)
//===================================================
{
$data=$this->dataArray[$id - 1];
/*
foreach($data as $key=>$value){
echo "$key = $value</br>";
}
*/
echo "ID: ".$data['id']."</br>";
echo "partNumber: ".$data['partNumber']."</br>";
echo "partName: ".$data['partName']."</br>";
echo "simpleName: ".$data['simpleName']."</br>";
echo "stock: ".$data['stock']."</br>";
echo "location: ".$data['location']."</br>";

}// end function

//===================================================
public function getTotalRecords()
//===================================================
{
return $this->totalRecords;
}// end function

//===================================================
public function showColumnList()
//===================================================
{
foreach($this->columnList as $field){
echo "$field ";
}
echo "</br>";
}// end function

}// end class

?>

投稿日時 - 2019-12-07 14:51:04

QNo.9687310

困ってます

質問者が選んだベストアンサー

mysqli_fetch_arrayは、最初の行しか返さないためwhileでループする必要があります。
具体的には
$row=mysqli_fetch_array($result);
foreach($row as $col){
 $this->columnList[]=$col;
}
の部分を
while ($col = mysqli_fetch_array($result)) {
 $this->columnList[] = $col['COLUMN_NAME'];
}
のように書き換える必要があります。
※OKWAVEの仕様上、インデントを全角スペースで表現しています。コピペの際はご注意ください。

参考URL:https://www.php.net/manual/ja/mysqli-result.fetch-array.php#Hcom104189

投稿日時 - 2019-12-07 22:14:53

お礼

早速にご回答を頂き、有難うございます。
ご指摘のコードに換えたら、コラムのリストを取得することが出来ました。
また一つ勉強になりました。

投稿日時 - 2019-12-07 23:10:53

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問