360教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

ODBC to mySQL

时间:2024/7/24作者:未知来源:360教程人气:

[摘要]<?php/** * ODBC to mySQL * 徐祖宁 (唠叨) * czjsz_ah@stats.gov.cn * * 初次接触php+mysql的朋友,有很多是ASP的高手。为使尽快...
<?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

关键词:ODBC to mySQL




Copyright © 2012-2018 360教程(http://www.360sd.cn) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版