mysql|odbc
/**
* ODBC to mySQL
* Xu Zuning (しつこい)
* czjsz_ah@stats.gov.cn
*
* php+mysql を初めて使用する友人の多くは ASP マスターです。できるだけ早く始めるために
* このプログラムのクローズアップは、ODBC データ ソースを介して元のデータベースを mysql に変換するために使用されます
* 実際、そのようなプログラムは数多くあり、ハイライト領域にも多数あります。
* このプログラムの特徴は、データソースの名前とmysqlライブラリの名前だけがわかればよいことです。プログラムは
* データ ソース内のテーブルに基づいて自動的に動作します。
*
*/
set_time_limit(0);
$dsn = "tjtz"; // データソース名
$dsn_name = "" // データソースのユーザー名
$dsn_pass = ""; // データ ソースのパスワード
$sql = "tjtz"; // mysql ライブラリ名、通常はデータ ソース名を使用できます
$sql_host = "" // mysql サーバー名
$sql_name = ""; // mysql ユーザー名
$sql_pass = "" // mysql パスワード
$odbc = odbc_connect($dsn,$dsn_name,$dsn_pass);
$result = odbc_tables($odbc);
$fields = odbc_num_fields($ result) ;
if(! function_exists("odbc_fetch_array")) {
// odbc_fetch_array 関数が存在するかどうかを確認し、存在しない場合は定義します
// マニュアルにはこの関数があると記載されていますが、4.1 には間違いなくありません。 2
// 注意してください。 odbc_fetch_into によって返される配列には、添え字を使用してのみアクセスできます。
function odbc_fetch_array(&$result) {
$ar = array();
odbc_fetch_into($result,$ar);
return $ar;
}
}
// ライブラリ内のテーブルを取得します
while($ar[] = odbc_fetch_array($result));
//フィルター関数を定義します
function filter($var) {
return ($var[3 ] == "TABLE");
}
// ユーザーテーブルを除外します
$ar = array_filter($ar,"filter");
foreach($ar as $tab) {
$tables[] = $tab [2];
}
// テーブルドキュメントを生成します。存在する場合は実行されません。
if(! file_exists("$sql.sql")) {
// 各テーブルのフィールド情報を抽出します
$ fp = fopen("$sql.sql","w") ;
foreach($tables as $table) {
$result = odbc_do($odbc,"select * from $table");
$str = sprintf( "Table%s("、$ table); :"")
,odbc_field_name($result,$i+1)
,odbc_field_type($result,$i+1)
);
}else if (eregi("COUNTER",odbc_field_type($result,$i+ 1))) {
$s = sprintf("%s%s TINYINT(%s) AUTO_INCREMENT PRIMARY KEY"
, ($i>0?", ":"") ,odbc_field_name($result,$i+1) )
,odbc_field_len($result,$i+1)
);
}else {
$s = sprintf("%s%s %s( %s)"
,($i>0?", ": "")
,odbc_field_name($result,$i+1)
,odbc_field_type($result,$i+1)
,odbc_field_len($result, $i+1)
echo "テーブル ファイル $sql .sqlが生成されました。
";
echo "コマンドが正しいか確認してください。テーブルを再構築する必要がない場合は、次の if(1) を if(0) に変更してください
";
echo "テーブル名は変更しないでください。フィールドを追加したい場合は、最後に追加してください ! ";
echo "確認後にこのプログラムを再実行してください! ";
odbc_close($odbc);
exit;
}
if(1) { //テーブルを再構築する必要はありません。if(1) を if(0) に変更してください
echo "テーブルの作成開始...
";
$mysql = mysql_connect();
mysql_drop_db($sql);
mysql_create_db ($sql);
mysql_select_db($sql);
$fp = fopen("$sql.sql","r");
$buffer = fread($fp,filesize("$sql.sql"));
fclose($fp);
$ar = split( "n",$buffer);
foreach($ar as $query) {
if(trim($query) != "") {
// echo " $query
";
mysql_query($query, $mysql);
}
}
}
// テーブル作成ファイルからテーブル情報を抽出
$info = array();
$s = file(" $sql.sql");
foreach($s as $value) {
if(eregi("create +table +([a-z0-9_-]+) *[(](.+)[)]" ,$value,$regs)) {
$table = $regs[1];
$info[$table] = array();
$ar = split(",",$regs[2]);
foreach ($ar as $v) {
sscanf($v ,"%s %s",$p,$p);
if(eregi("double|count|int",$p)) { // これらの型追加する必要はありません。他には何がありますか?
$info [$table][] ="";
[$table][] sql_pass);
mysql_select_db($sql);
eチョ「< br>DSN から mySQL にデータを転送中...";
foreach($info as $key => $ar) {
$query = "select * from $key"; // ODBC クエリを生成します
$result = odbc_do ($odbc,$query);
$mode = true;
while($rs = odbc_fetch_array($result)) {
$sql_query = " $key 値に挿入 (";
for($i=0; $i
$sql_query = "{$ar[$i]}{$rs[$i ]}{$ar[$i]}";
}
$sql_query .= ")";
mysql_query($sql_query,$mysql);
}
}
odbc_close($odbc);
echo "< br>操作は終了しました";
?>