忍者ブログ
バナヤンの忍者風呂
忍者ブログのカスタマイズ、各種WEBツールのテストなど試行錯誤の日々。 VMLによる地図の作成を研究していましたが、一時中断して、今はPHPを勉強しているところです。
ニュース
この欄には、このブログの内容に関連するニュースを掲載する予定です。
お知らせ
この欄には管理人からのお知らせなどを掲載します。
[64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHP+SQLite CSVファイルのインポート

「PHP+SQLite」を勉強中です。今回のテーマは、CSVファイルのインポート。

CSVファイルのCSVは、"Comma Separated Values"の略。「コンマ区切りテキストファイル」のこと。データをカンマ「,」で区切って並べます。表計算やデータベースなど多くのアプリケーションでこの形式のファイルの入出力をサポートしています。ExcelやAccessでも利用できます。実体はテキストファイルなので、「メモ帳」などのテキストエディタでも作成、編集が可能です。

あるアプリケーションにあるデータを別のアプリケーションで使用する場合に、いったんCSVファイルに出力して、それからそのCSVファイルを読み込む形でデータを入力することがあります。既存のデータを一括入力できるので、非常に便利です。

前に「PHP CSVファイルの読込み(fgetcsv)」という記事でfgetcsv関数を用いてCSVファイルを読み込む方法を学びました。今回はこれを応用して、SQLiteデータベースのテーブルにCSVファイルのデータを取り込みます。

サンプルのCSVファイルは、前と同じ都道府県コードのリストです。

[ソース]CSVファイル「pref.csv」---都道府県コード

1,北海道
2,青森
3,岩手
4,宮城
5,秋田
6,山形
7,福島
8,茨城
9,栃木
10,群馬
11,埼玉
12,千葉
13,東京
14,神奈川
15,新潟
16,富山
17,石川
18,福井
19,山梨
20,長野
21,岐阜
22,静岡
23,愛知
24,三重
25,滋賀
26,京都
27,大阪
28,兵庫
29,奈良
30,和歌山
31,鳥取
32,島根
33,岡山
34,広島
35,山口
36,徳島
37,香川
38,愛媛
39,高知
40,福岡
41,佐賀
42,長崎
43,熊本
44,大分
45,宮崎
46,鹿児島
47,沖縄


画面サンプルの例を順番に追っていきましょう。

[画面サンプル]PHP+SQL CSVファイルインポート 入力画面
PHP+SQL CSVファイルインポート入力画面

[画面サンプル]PHP+SQL CSVファイルインポート チェック画面
PHP+SQL CSVファイルインポートチェック画面

[画面サンプル]PHP+SQL CSVファイルインポート 実行画面
PHP+SQL CSVファイルインポート実行画面

テーブルにデータがインサ-トされたか、「SELECT * FROM pref」で確認しましょう。「PHP+SQLite テーブル情報(sqlite_master)」でソースを紹介したクエリの実行確認画面を今回も使用しました。

[画面サンプル]PHP+SQL CSVファイルインポート 結果画面
PHP+SQL CSVファイルインポート結果画面

[ソース]PHP+SQLite CSVファイルのインポート(csv2sqlite.php)

<?php
if(!($_POST['filename'])){
$mode="input";
$title ="入力モード";
$msg="下のファイル名、テーブル名の欄に入力して下さい。";
}elseif(!(file_exists($_POST['filename']))){
$mode="error";
$title="確認して下さい。";
$msg="この名前のファイルは見つかりませんでした。<br>";
}elseif(!(file_exists($_POST['dbname']))){
$mode="error";
$title="確認して下さい。";
$msg="この名前のデータベースは見つかりませんでした。<br>";
}else{
$db=sqlite_open($_POST['dbname']);
$query="SELECT tbl_name FROM sqlite_master WHERE tbl_name ='".$_POST['tablename']."'";
$result=sqlite_query($db,$query);
$rows = sqlite_num_rows($result);
if($rows==0){
$mode="error";
$title="確認して下さい。";
$msg="この名前のテーブルは見つかりませんでした。<br>";
}else{
$mode="checked";
$title="チェックモード";
$msg="入力先のテーブルのフィールドとCSVファイルの1行目は、次のように対応します。";
$msg.="よろしければ「insert」ボタンをクリックして下さい。";
}
}
if($_POST['regist']){
$mode="insert";
$title ="CSVデータ入力モード";
$msg="テーブルにデータをINSERTしました。";
}
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Pragma" content="no-cache">
<title>CSVファイルをSQLiteテーブルに</title>
</head>

<body>
<h1><?= $title ?></h1>
<p><?= $msg ?></p>
<form method='post' action="<?= $_SERVER[PHP_SELF] ?>">
CSVファイル名:<input type='text' name='filename' value="<?= $_POST['filename'] ?>"><br>
データベース名:<input type='text' name='dbname' value="<?= $_POST['dbname'] ?>"><br>
入力先テーブル名:<input type='text' name='tablename' value="<?= $_POST['tablename'] ?>"><br>
<?php
if($mode=="input"||$mode=="checked"||$mode=="error"){
echo "<input type='submit' name='check' value='check'>";
}
if($mode=="checked"){
echo "<input type='submit' name='regist' value='insert'>";
}
?>
</form>

<?php
if($mode=="checked"){
$query="SELECT * FROM ".$_POST['tablename'];
$result=sqlite_query($db,$query);
$fields = sqlite_num_fields($result);
echo "<table><tr>";
for($i=0;$i<$fields;$i++){
$field_name=sqlite_field_name($result,$i);
echo "<th style='border:#003 solid 1px;'>".$field_name."</th>";
}
echo "</tr>";
$fp = fopen ($_POST['filename'],"r");
$data = fgetcsv ($fp, 1000, ",");
$fields = count($data);
echo "<tr>";
for($i=0;$i<$fields;$i++){
echo "<td style='border:#003 solid 1px;'>".$data[$i]."</td>";
}
echo "</tr></table>";
sqlite_close($db);
fclose ($fp);
}
?>

<?php
if($mode=="insert"){
$fp = fopen ($_POST['filename'],"r");
echo "<table>";
while($data = fgetcsv ($fp, 1000, ",")){
$value_list="";
echo "<tr>";
$fields = count($data);
for($i=0;$i<$fields;$i++){
$value_list.="'".$data[$i]."',";
echo "<td style='border:#003 solid 1px;'>".$data[$i]."</td>";
}
$value_list=substr($value_list,0,-1);
$query="INSERT INTO ".$_POST['tablename']." VALUES(".$value_list.")";
$result=sqlite_query($db,$query);
echo "</tr>";
}
echo "</table>";
fclose ($fp);
}
?>
</body>
</html>


次回は、SQLiteデータベースのテーブルからCSVファイルをエクスポートする方法について考えたいと思います。
PR
QRコード
忍者ブログ [PR]
Copyright (C) 2006 banayan ALL RIGHTS RESERVED.