KUNISAN.JPブログコメント書き込み



PHPでMySQLデータベースの処理

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2009年9月17日
PHPでプログラムを組むようになってからもうすぐ2年になります。プログラミングの基礎に当たる繰り返し、分岐、文字列、配列、ファイル処理、正規表現などの処理は、かなり早い段階から手を付けていました。しかし、あまり自分のプログラムでは使用しないFTP、IMAP関連の機能や、PHP4では利用できなかったsimple_xml関数などについては、少し後になってから使えるようになりました。そして先日、ようやくオブジェクト機能を使った簡単なじゃんけんプログラムを作り、さらに今日はMySQLデータベースを操作するプログラムを作成したことで、PHPの基礎学習は(私の中で)めでたく終了となりました。あとはこれらの技術を組み合わせて、効率良くプログラミングができれば、勉強した甲斐があったというものです。

ちなみに、データベースの操作は非常に奥が深く、とても1日だけで全ての機能を使いきることはできません。ただ、とりあえずPHPで簡単な操作ができる段階まで来れば、あとはSQLの書き方でどうにでもなります。そのSQLですが、Accessでも何でもデータベースを設計したことがある人なら、理解するのはそれほど難しくはないです。残念ながらうちにはWebで公開できるような数千件~数万件のデータはないので、一人で応用的なプログラムを作成するのは今のところちょっとできないです。

さて、今日作成したMySQLデータベースを操作するプログラムですが、せっかくなので公開しておきます。今回のプログラムは2本立てになっています。

1) CSVデータファイル(日付、製品名、売上の3項目のみ)を、データベースにインポート
2) データベースからデータを抽出(SQLで条件設定、並び替え、グループ化、合計値の操作)

PHPを学習されている方は、ご参考にどうぞ。

■■1.データベースの作成とCSVファイルからのデータインポート■■
<?php
//使用言語とエンコードの指定
mb_language("ja");
mb_internal_encoding("SJIS");

//データベース情報
$dbserver = 'localhost';
$dbuser = 'XXXXXXXX';
$dbpassword = 'XXXXXXXX';
$dbname = 'XXXXXXXXdb1';

//MySQLに接続する
$con = mysql_connect($dbserver,$dbuser,$dbpassword);
if ($con) {
print '接続完了<br>';
} else {
print '接続失敗<br>';
}

//データベースを選択
$selectdb = mysql_select_db($dbname);
if ($selectdb) {
print 'データベース選択完了<br>';
} else {
print 'データベース選択失敗<br>';
}

//テーブル作成 (フィールド: data=日付、product=製品名、sales=売上)
$sql = 'CREATE TABLE sales_record (
date date,
product text,
sales int,
) engine=MyISAM;';
if (mysql_query($sql)) {
print 'テーブル作成成功<br>';
} else {
print 'テーブル作成失敗<br>';
}

//CSVファイルを配列として読み込む
$filedata = file("sales_record.csv");

//配列内のデータを行ごとに表示
foreach ($filedata as $data) {
print $data.'<br>';

//データをカンマで分割して配列にする。
$sd = explode(',',$data);

//日本語のデータ(product=製品名)をSJISからUTF-8に変換
$sd[1]= mb_convert_encoding($sd[1], "UTF-8","SJIS");

//テーブルにレコードを追加する
$sql = 'INSERT INTO sales_record
(date,product,sales)
VALUES
("'.$sd[0].'","'.$sd[1].'",'.$sd[2].')';
if (mysql_query($sql)) {
print $sd[1].'レコード追加成功<br>';
} else {
print 'レコード追加失敗<br>';
}

}

//mySQLとの接続を解除
mysql_close();

?>
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■■■■■■2.データベースからデータを抽出■■■■■■■■
<?php
//使用言語とエンコードの指定
mb_language("ja");
mb_internal_encoding("SJIS");

//データベース情報
$dbserver = 'localhost';
$dbuser = 'XXXXXXXX';
$dbpassword = 'XXXXXXXX';
$dbname = 'XXXXXXXXdb1';

//MySQLに接続する
$con = mysql_connect($dbserver,$dbuser,$dbpassword);
if ($con) {
print '接続完了<br>';
} else {
print '接続失敗<br>';
}

//データベースを選択
$selectdb = mysql_select_db($dbname);
if ($selectdb) {
print 'データベース選択完了<br>';
} else {
print 'データベース選択失敗<br>';
}

//データを抽出(1)
//売上が0より大きいものを選択し、売上の大きい順で並べて、テーブル中の全てのフィールドを表示
$sql = 'SELECT * FROM sales_record WHERE sales > 0 ORDER BY sales DESC';

//結果を取得(1)
$data = mysql_query($sql);

if ($data) {
print 'データ抽出成功<br>';

//データ件数を表示
print '抽出したデータ件数:'.mysql_num_rows($data).'件<br>';

//結果セットの表示
while ($sd = mysql_fetch_array ($data)) {

//日本語のデータをSJISからUTF-8に変換
$sd[1]= mb_convert_encoding($sd[1], "SJIS","UTF-8");

//データを一列ずつ表示
print $sd[0].','.$sd[1].','.$sd[2].'<br>';
}

} else {

print 'データ抽出失敗<br>';
}

//データを抽出(2)
//製品名でグループ化して、売上の合計値を集計し、その合計値を大きい順に並べて、フィールドとして製品名と合計値の2つを表示する。
$sql = 'SELECT product, Sum(sales) as sales FROM sales_record GROUP BY product ORDER BY sales DESC';

//結果を取得(2)
$data = mysql_query($sql);

if ($data) {
print 'データ抽出成功<br>';

//データ件数を表示
print '抽出したデータ件数:'.mysql_num_rows($data).'件<br>';

//結果セットの表示
while ($sd = mysql_fetch_array ($data)) {

//日本語のデータをSJISからUTF-8に変換
$sd[0]= mb_convert_encoding($sd[0], "SJIS","UTF-8");

//データを一列ずつ表示
print $sd[0].','.$sd[1].'<br>';
}

} else {

print 'データ抽出失敗<br>';
}

//mySQLとの接続を解除
mysql_close();

?>
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■





PHP関連記事(リンク一覧): さくらレンタルサーバーのアクセス履歴をPHPで表示 / PHPで画像のアップロード(さくらレンタルサーバーのPHPでImageMagick) / PHP REVERSI(オセロもどき)の続き / PHP REVERSI(リバーシ) - オセロもどきゲームの公開 / PHP版-簡易アクセスブロック(IPアドレス、ホスト名、OS、ブラウザ名で制御) / ...(記事連続表示)

基礎からのMySQL [基礎からのシリーズ] (プログラマの種シリーズ)
基礎からのMySQL をAmazon.co.jpでチェック


1)商品の宣伝、宗教や政治活動の勧誘など、本サイトの趣旨に合わない書き込みはご遠慮ください。
2)個人、団体への誹謗中傷や、差別的な発言、公序良俗に反する表現は禁止します。
3)本ブログへの書き込みによって何らかの問題が発生した場合、KUNISAN.JP管理者までご連絡いただければ、内容の修正、削除を行います(その他の責任については負いかねます)。
4)製作者サイドの都合により、予告無く書き込みの一部または全てが削除されることがあります。あらかじめご了承ください。
5)迷惑メールやコンピュータウィルス被害を防止するため、必要な場合以外にはメールアドレスを書き込まないことをお勧めします。

タイトル
お名前 (※必須)
Eメール
ホームページ

コメント (※必須)


画像ファイル(サイズ:10MB以下 形式:gif,jpeg,jpg,png)