Mysql データベースを Excel にエクスポート (ODBC ドライバー)
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <?php date_default_timezone_set('アジア/上海'); /* *@author:jinger7281@gmail.com ※本プログラムが企業や個人の権利を侵害しない限り、 *このプログラムは GPL v2 ライセンスに基づいて配布されています。詳細については http://www.gnu.org/copyleft/lesser.html を参照してください。 ※本プログラムが既に他人の特許を使用している場合、本プログラムは特許権者のライセンスに従って使用されます。 *このプログラムがあなたの特許を侵害している場合は、速やかに作者にご連絡ください(上記の電子メールアドレスで十分です)。ご迷惑をおかけして申し訳ございません。 *このクラスは以下を実装します: ※mysqlデータベースとテーブル情報を入力すれば、ワンクリックでMysqlデータベースの内容が自動的にエクスポートされます。これはWindows版です。 *注意: Excel ファイルを入力する場合は、ファイル名を入力するだけで済みます。エクスポートされた Excel ファイルは 2003 バージョンです。 ※私のレベルが限られているため、サンプルプログラムに従って入力しないとスムーズに実行できません。 * このバージョンには既知のバグがあります: ※1. Mysqlデータベースにエラーが発生した場合、エラーメッセージが出力されます。サーバー情報の安全性を確保するため、リリース版はお客様ご自身で削除してください。 ※2. odbc接続部分にはエラーハンドリングがありませんので、Release版ではエラーハンドリング部分を追加してください(mysqlと同様)。 */ クラスmysql2Xls{ private $currDir; // 現在のディレクトリ名は dirname(__FILE__) を使用して取得されます。 private $srcData; //Mysql で取得したデータ配列、これは 2 次元配列です。 private $srcColumn; //Mysql データベースの列名。列名を Excel ファイルの最初の行にマップするため、このプロパティは 1 次元配列です。 public $xlsName; //Excelファイルのファイル名にはサフィックスを付ける必要はありません。サフィックスを設定する必要がある場合は、setXlsName関数でサフィックスを変更してください。 private $host; //この行の次の 5 行は Mysql 接続設定です。 プライベート $ユーザー名; プライベート $pwd; プライベート $dbName; プライベート $tbName; パブリック関数 __construct(){ $this->currDir = ディレクトリ名(__FILE__); } /* Mysqlのカラム名を取得します */ パブリック関数 getSrcColumn(){ $handle = @mysql_connect($this->ホスト,$this->ユーザー名,$this->pwd); $this->srcColumn = array(); if(is_bool($handle)){ エコー "====**====<br/>"; echo "Mysql 接続エラー。<br/>ファイル: ".(__FILE__)." <br/>行番号: ".(__LINE__)."<br/>エラー: ".mysql_error() ; echo "<br/>====**====<br/>"; 終了(0); } $ret = @mysql_select_db($this->dbName,$handle); if($handle == FALSE){ エコー "====**====<br/>"; echo "データベースの選択中に MySQL エラーが発生しました。<br/>ファイル: ".(__FILE__)." <br/>行番号: ".(__LINE__)."<br/>エラー: ".mysql_error (); echo "<br/>====**====<br/>"; 終了(0); } $ret = @mysql_query('describe '.$this->tbName,$handle); if(is_bool($ret)){ エコー "====**====<br/>"; echo "Mysql ステートメントの実行エラー。<br/>ファイル: ".(__FILE__)." <br/>行番号: ".(__LINE__)."<br/>エラー: ".mysql_error( ); echo "<br/>====**====<br/>"; 終了(0); } while(($data = mysql_fetch_array($ret)) != FALSE){ array_push($this->srcColumn,$data['フィールド']); } mysql_free_result($ret); mysql_close($handle); $this->srcColumn を返します。 } /* 指定された MySQL データベース テーブルの内容を取得します */ パブリック関数 getSrcData(){ $handle = @mysql_connect($this->ホスト,$this->ユーザー名,$this->pwd); $this->srcData = array(); if(is_bool($handle)){ エコー "====**====<br/>"; echo "Mysql 接続エラー。<br/>ファイル: ".(__FILE__)." <br/>行番号: ".(__LINE__)."<br/>エラー: ".mysql_error() ; echo "<br/>====**====<br/>"; 終了(0); } $ret = @mysql_select_db($this->dbName,$handle); if($handle == FALSE){ エコー "====**====<br/>"; echo "データベースの選択中に MySQL エラーが発生しました。<br/>ファイル: ".(__FILE__)." <br/>行番号: ".(__LINE__)."<br/>エラー: ".mysql_error (); echo "<br/>====**====<br/>"; 終了(0); } $ret = @mysql_query('select * from '.$this->tbName,$handle); if(is_bool($ret)){ エコー "====**====<br/>"; echo "Mysql ステートメントの実行エラー。<br/>ファイル: ".(__FILE__)." <br/>行番号: ".(__LINE__)."<br/>エラー: ".mysql_error( ); echo "<br/>====**====<br/>"; 終了(0); } while(($data = mysql_fetch_array($ret)) != FALSE){ array_push($this->srcData,$data); } mysql_free_result($ret); mysql_close($handle); $this->srcData を返す; }/* メイン部分は Mysql データベースの内容を Excel ファイルにエクスポートします */ パブリック関数 m2Xls(){ $handle = odbc_connect("Driver={MicroSoft Excel Driver (*.xls)};READONLY=false;CREATE_DB="".$this->xlsName."";Dbq=".$this->xlsName," "、""); $sql = 'テーブルの作成 '.$this->tbName.'('; foreach($this->srcColumn as $value){ $sql .= ($value." テキスト,"); } $sql = substr($sql,0,strlen($sql)-1); $sql .= ")"; $ret = odbc_exec($handle,$sql); //上記の内容は Excel ファイルを作成し、Mysql カラムを Excel ファイルに転送することです。 foreach($this->srcData as $value){ $sql = '['.$this->tbName.'$] に挿入します。values('; for($i=0;$i<count .="iconv("UTF-8","GB2312","'".$value[$i]."',");" substr odbc_exec mysql public function setmysqlargs>host = $host; $this->ユーザー名 = $ユーザー名; $this->pwd = $pwd; $this->dbName = $dbName; $this->tbName = $tbName; } /* Excel データベースの名前を設定します */ パブリック関数 setXlsName($xlsName){ $this->xlsName = $this->currDir."\".$xlsName.".xls"; $this->xlsName を返します; } } /*以下の部分はテスト機能のため削除しても構いません*/ header("Content-Type:text/html;charset=UTF-8"); $mysql2xls = 新しい mysql2Xls(); $mysql2xls->setMysqlArgs('localhost','root','******','others','zhuifeng'); $mysql2xls->setXlsName('test'); $mysql2xls->getSrcColumn(); $mysql2xls->getSrcData(); $mysql2xls->m2Xls(); ?> <div class="clear"></div></count>