若是在win32环境下,可以不要转换,用com调用adodb。

解决方案 »

  1.   

    人家只要转换嘛,可以参考这个:
    <?php
    /**
    * ODBC to mySQL
    * 徐祖宁 (唠叨)
    * 2002-04
    [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>操作结束";
    ?>