仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1120|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页设计ODBC to mySQL

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:18:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-5 18:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表