<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      ODBC to mySQL

      [摘要]<?php/** * ODBC to mySQL * 徐祖寧 (嘮叨) * czjsz_ah@stats.gov.cn * * 初次接觸php+mysql的朋友,有很多是ASP的高手。為使盡快上手 * 特寫此程序,用于將原有的數據庫通過ODBC數據源轉換到mysql * 其實此類程序有很多,...
      <?php
      /**
      * ODBC to mySQL
      * 徐祖寧 (嘮叨)
      * 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("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>操作結束";
      ?>



      標簽:ODBC to mySQL 
      日韩精品一区二区三区高清