国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

ODBC to mySQL

2024-07-24 12:56:20
字體:
來源:轉載
供稿:網友
<?php
/**
* odbc to mysql
* 徐祖寧 (嘮叨)
* [email protected]
*
* 初次接觸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("create table %s (",$table);
    for($i=0;$i<odbc_num_fields($result);$i++) {
      if(eregi("double",odbc_field_type($result,$i+1))) {
        $s = sprintf("%s%s %s"
               ,($i>0?", ":"")
               ,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)
             );
      }
      $str .= $s;
    }
    $str .= ");/n";
    fputs($fp,$str);
  }
  fclose($fp);
  echo "已產生了建表表文件$sql.sql。<br>";
  echo "請檢查命令是否正確。若不需要重新建表,請將下面的if(1) 改為if(0)<br>";
  echo "不要改變表名,要增加字段請放在后面!";
  echo "確認后重新運行本程序!";
  odbc_close($odbc);
  exit;
}

if(1) { // 若不需要重新建表,請將if(1) 改為if(0)
  echo "開始建表...<br>";
  $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<br>";
      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][] ="";
      }else {
        $info[$table][] ="'";
      }
    }
  }
}

$mysql = mysql_connect($sql_host,$sql_name,$sql_pass);
mysql_select_db($sql);

echo "<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 = "insert into $key values (";
    for($i=0;$i<count($rs);$i++) {
      if($i > 0) $sql_query .= ",";
      $sql_query .= "{$ar[$i]}{$rs[$i]}{$ar[$i]}";
    }
    $sql_query .= ")";
    mysql_query($sql_query,$mysql);
  }
}

odbc_close($odbc);
echo "<br>操作結束";
?>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 滕州市| 涞源县| 乌审旗| 汨罗市| 微山县| 黎城县| 萝北县| 乡城县| 威海市| 九寨沟县| 乌拉特后旗| 清水河县| 兴业县| 仙游县| 阳东县| 株洲市| 大竹县| 阳城县| 开平市| 阿拉善左旗| 南溪县| 梅河口市| 隆子县| 临夏县| 桐梓县| 大同市| 客服| 巴东县| 陆良县| 白沙| 原阳县| 台江县| 宁乡县| 区。| 贵南县| 开阳县| 长兴县| 卓资县| 楚雄市| 武冈市| 安龙县|