仓酷云
标题:
PHP网页设计ODBC to mySQL
[打印本页]
作者:
因胸联盟
时间:
2015-2-4 00:18
标题:
PHP网页设计ODBC to mySQL
告诉你了一个方式,但是缺少努力这一环节,那也是白搭。mysql|odbc <?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>操作停止";
?>
看看西,人家这个编论坛,那个CMS,还有那啥CRM,我啥时候写一个呢?
作者:
第二个灵魂
时间:
2015-2-4 11:27
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
作者:
谁可相欹
时间:
2015-2-9 09:23
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
作者:
仓酷云
时间:
2015-2-11 11:17
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
作者:
变相怪杰
时间:
2015-2-12 17:57
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者:
兰色精灵
时间:
2015-3-4 11:10
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者:
小女巫
时间:
2015-3-11 18:36
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
作者:
只想知道
时间:
2015-3-12 20:52
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
作者:
蒙在股里
时间:
2015-3-13 00:09
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者:
柔情似水
时间:
2015-3-16 00:58
做为1门年轻的语言,php一直很努力。
作者:
精灵巫婆
时间:
2015-3-16 04:27
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
作者:
小魔女
时间:
2015-3-22 20:10
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
作者:
爱飞
时间:
2015-3-22 20:10
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者:
简单生活
时间:
2015-3-22 20:10
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者:
再见西城
时间:
2015-3-22 20:10
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
作者:
活着的死人
时间:
2015-3-22 20:10
Ps:以上纯属原创,如有雷同,纯属巧合
作者:
因胸联盟
时间:
2015-4-12 08:09
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
作者:
老尸
时间:
2015-4-14 20:51
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
作者:
莫相离
时间:
2015-4-24 23:12
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
作者:
愤怒的大鸟
时间:
2015-4-26 18:09
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2