### データ作成
create database universe;
use universe;
create table planets(
id int primary key auto_increment,
name varchar(255),
diameter float,
mass float
);
describe planets;
insert into planets(name, diameter, mass) values (‘Sun’,’110′,’330000′);
insert into planets(name, diameter, mass) values (‘Mercury’,’0.38′,’0.06′);
insert into planets(name, diameter, mass) values (‘Venus’,’0.95′,’0.82′);
insert into planets(name, diameter, mass) values (‘Earth’,’1′,’1′);
insert into planets(name, diameter, mass) values (‘Mars’,’0.53′,’0.11′);
insert into planets(name, diameter, mass) values (‘Jupiter’,’11’,’320′);
insert into planets(name, diameter, mass) values (‘Saturn’,’9.5′,’95’);
insert into planets(name, diameter, mass) values (‘Uranus’,’4′,’15’);
insert into planets(name, diameter, mass) values (‘Neptune’,’3.9′,’17’);
select * from planets;
### データ出力
var_dumpでテストしてから、出力します。
try {
$dbh = new PDO('mysql:host=localhost;dbname=universe;charset=utf8','root','hogehoge', array(PDO::ATTR_EMULATE_PREPARES => false));
} catch(PDOException $e){
exit('データベース接続失敗。'.$e->getMessage());
}
$export_sql = "select * from planets";
// $stmt = $dbh->query($export_sql);
// $row = $stmt->fetchAll(PDO::FETCH_ASSOC);
// var_dump($row);
$file_path = "csv/planets.csv";
$export_csv_title = ["id","name","diameter","mass"];
foreach($export_csv_title as $key => $val){
$export_header[] = mb_convert_encoding($val, 'SJIS-win', 'UTF-8');
}
if(touch($file_path)){
$file = new SplFileObject($file_path, "w");
$file->fputcsv($export_header);
$stmt = $dbh->query($export_sql);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$file->fputcsv($row);
}
$dbh = null;
}
echo "done";
### カラム名も取得したい場合
show columnsとして配列を取得して、その中からFieldを取り出す
$export_column = "show columns from planets";
$stmt = $dbh->query($export_column);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$field[] = $row["Field"];
}
つなげると
try {
$dbh = new PDO('mysql:host=localhost;dbname=universe;charset=utf8','root','hogehoge', array(PDO::ATTR_EMULATE_PREPARES => false));
} catch(PDOException $e){
exit('データベース接続失敗。'.$e->getMessage());
}
$export_column = "show columns from planets";
$stmt = $dbh->query($export_column);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$field[] = $row["Field"];
}
$export_sql = "select * from planets";
$file_path = "csv/planets.csv";
$export_csv_title = $field;
foreach($export_csv_title as $key => $val){
$export_header[] = mb_convert_encoding($val, 'SJIS-win', 'UTF-8');
}
if(touch($file_path)){
$file = new SplFileObject($file_path, "w");
$file->fputcsv($export_header);
$stmt = $dbh->query($export_sql);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$file->fputcsv($row);
}
$dbh = null;
}
echo "done";
カラム名だけ取得のニーズはあるので、その命令文を作っても良いように思ったが、、、
MySQL8.0のGithubレポを見ると軽々しく言えんな。。
https://github.com/mysql/mysql-server/blob/8.0/sql/sql_select.cc