mysql数据库已经连接好,现在想要在oracle数据库里面抓取数据,然后写入mysql数据里面...请问如何操作 
自己写的,但是无法写入mysql里面... <?php 
require('conn.php'); //查询  
  
  
$stmt  =  OCIParse($conn,"SELECT FID,FBH,FMC,FDJ,FGG,FZL,FTJ FROM T_CPZL");  
  
  OCIDefineByName($stmt,"FID",&$FID);  
  OCIDefineByName($stmt,"FBH",&$FBH); 
OCIDefineByName($stmt,"FMC",&$FMC); 
OCIDefineByName($stmt,"FDJ",&$FDJ); 
OCIDefineByName($stmt,"FGG",&$FGG); 
OCIDefineByName($stmt,"FZL",&$FZL); 
OCIDefineByName($stmt,"FTJ",&$FTJ); 
OCIExecute($stmt); $sql="insert into jos_vm_product(fid,product_sku,product_name,product_url,product_length,product_weight,product_width) values ($FID,$FBH,$FMC,$FDJ,$FGG,$FZL,$FTJ)";//写入数据的sql语句 

解决方案 »

  1.   

    建议楼主看看我的blog,里面收录了php读取oracle的方法。
      

  2.   

    1.下载Oracle10.2_Client_Lite进行安装
    2.修改tnsnames.ora.txt文件,如下:
    ot =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.129)(PORT = 1521))   //修改这个文件HOST = 10.1.1.129     
          (SERVER = DEDICATED)
          (SERVICE_NAME = test_db)  //加上数据库名
        )
      )
    3.$db=oci_connect('username','passwd','database');  //ot为"tnsnames.ora.txt"文件里的变量
      $sql="select * from table";
      $stmt=oci_parse($db,$sql);
      oci_execute ($stmt);
      

  3.   

    楼上这个 我配置过...但是还是无法实现.
    <?php 
    require('conn.php'); //查询   
       
       
    $stmt   =   OCIParse($conn,"SELECT FID,FBH,FMC,FDJ,FGG,FZL,FTJ FROM T_CPZL");   
      
      OCIDefineByName($stmt,"FID",&$FID);   
      OCIDefineByName($stmt,"FBH",&$FBH); 
     OCIDefineByName($stmt,"FMC",&$FMC);
     OCIDefineByName($stmt,"FDJ",&$FDJ);
     OCIDefineByName($stmt,"FGG",&$FGG);
     OCIDefineByName($stmt,"FZL",&$FZL);
     OCIDefineByName($stmt,"FTJ",&$FTJ); 
      OCIExecute($stmt);   
      while   (OCIFetch($stmt))   {   
          echo   "FID:".$FID."\n";   
          echo   "FBH:".$FBH."\n";   
      echo   "FMC:".$FMC."\n";   
          echo   "FDJ:".$FDJ."\n"; 
      echo   "FGG:".$FGG."\n";   
          echo   "FZL:".$FZL."\n"; 
      echo   "FTJ:".$FTJ."\n";   
          
      }   
      OCIFreeStatement($stmt);   
      OCILogoff($conn);   
    $sql="insert into jos_vm_product(fid,product_sku,product_name,product_url,product_length,product_weight,product_width) values ('$FID','$FBH','$FMC','$FDJ','$FGG','$FZL','$FTJ')";//写入数据 
    ?>
      

  4.   

    echo那里可以显示  但是要写到mysql那些就不行了
      

  5.   

    能显示。那肯定是你的insert语句写的有问题。检查一下你insert中的数据库字段名字有没有错误。
      

  6.   

    你的oracle的数据怎么读出来的?
    先解决这个问题再来处理mysql数据存入的事情
      

  7.   


    $stmt  =  OCIParse($conn,"SELECT FID,FBH,FMC,FDJ,FGG,FZL,FTJ FROM T_CPZL");  
      
      OCIDefineByName($stmt,"FID",&$FID);  
      OCIDefineByName($stmt,"FBH",&$FBH); 
    OCIDefineByName($stmt,"FMC",&$FMC); 
    OCIDefineByName($stmt,"FDJ",&$FDJ); 
    OCIDefineByName($stmt,"FGG",&$FGG); 
    OCIDefineByName($stmt,"FZL",&$FZL); 
    OCIDefineByName($stmt,"FTJ",&$FTJ); 
      OCIExecute($stmt);  
      while  (OCIFetch($stmt))  {  
          echo  "FID:".$FID."\n";  
          echo  "FBH:".$FBH."\n";  
      echo  "FMC:".$FMC."\n";  
          echo  "FDJ:".$FDJ."\n"; 
      echo  "FGG:".$FGG."\n";  
          echo  "FZL:".$FZL."\n"; 
      echo  "FTJ:".$FTJ."\n";  
          
      }  
      OCIFreeStatement($stmt);  
      OCILogoff($conn); 
    这里可以显示出来 但是把它写入mysql就不行了~
      

  8.   

    那你没有insert表中,提示什么?
      

  9.   

    $sql="insert into jos_vm_product(fid,product_sku,product_name,product_url,product_length,product_weight,product_width) values ('$FID','$FBH','$FMC','$FDJ','$FGG','$FZL','$FTJ')";//写入数据 
    写入表,显示空白....但是有记录
      

  10.   


    就是那几个字段的数据为空说明是可以insert的 
     但就是无法把oracle的数据写入
      

  11.   

    你的意思是说数据从oracle数据库直接存储到另一个mysql数据库?
      

  12.   

    可读 但是再写入mysql就不行了~
      

  13.   

    那就是说你的php同时调用2个不同类型的数据库了。你有php连接mysql的程序吗?
      

  14.   

    我觉得你取得了oracle的值的话,就应该断开php与oracle的连接,然后再调用php与mysql的连接。
      

  15.   

    $sql="insert into jos_vm_product(fid,product_sku,product_name,product_url,product_length,product_weight,product_width) values ('$FID','$FBH','$FMC','$FDJ','$FGG','$FZL','$FTJ')";
    字段如果不是数字,要加引号,如果不清楚,就全加上,呵呵.
      

  16.   


    php可以连接mysql我上面的代码执行后 
    在mysql数据库里,如果定义个字段为auto_increment的话,会显示有记录。
    但是那几个读取了oracle的数据再写入mysql的字段却什么都没...
      

  17.   

    最后看看sql语句有没有问题:(mysql和oracle的sql语句略有不同)$sql="insert into jos_vm_product(`fid`,`product_sku`,`product_name`,`product_url`,`product_length`,`product_weight`,
    `product_width`) values ('$FID','$FBH','$FMC','$FDJ','$FGG','$FZL','$FTJ')";//写入数据 
      

  18.   

    $sql="insert into jos_vm_product(fid,product_sku,product_name,product_url,product_length,product_weight,product_width) values ('{$FID}','{$FBH}','{$FMC}','{$FDJ}','{$FGG}','{$FZL}','{$FTJ}')";实在不行这样试一下!
      

  19.   

    echo $sql 看看有没有输出?
      

  20.   


    echo $sql
    value那里没有输出
      

  21.   

    如果echo $sql显示如下:
    FID:1181.0001 FBH:6 FMC:6 FDJ:6 FGG:1030*2540*1550 FZL:6 FTJ:6 FID: FBH: FMC: FDJ: FGG: FZL: FTJ: FID: FBH: FMC: FDJ: FGG: FZL: FTJ: FID: FBH: FMC: FDJ: FGG: FZL: FTJ: FID: FBH: FMC: FDJ: FGG: FZL: FTJ: insert into jos_vm_product(`fid`,`product_sku`,`product_name`,`product_url`,`product_length`,`product_weight`, `product_width`) values ('','','','','','','')系统更新
      

  22.   


    没关系,你做个实验。读取下mysql表里的内容:select * from jos_vm_product如果表里面有内容,但是读不出来,就说明你的连接有问题。
      

  23.   

    看看你的写法是否正确,因为没有你的源码.$conn = oci_connect("scott", "tiger");$stmt = oci_parse($conn, "SELECT empno, ename FROM emp");/* the define MUST be done BEFORE oci_execute! */oci_define_by_name($stmt, "EMPNO", $empno);
    oci_define_by_name($stmt, "ENAME", $ename);oci_execute($stmt);while (oci_fetch($stmt)) {
        echo "empno:" . $empno . "\n";
        echo "ename:" . $ename . "\n";
    }oci_free_statement($stmt);
    oci_close($conn);
      

  24.   

    重新赋值看看?$var1 = $fid;
    .......$varn = $ftj;$sql = insert .....另外,不知道你的FID是不是自增长的?如果是的话,在insert语句中把FID这项去掉试试
      

  25.   

    $var1 = '1'; 
    $sql="insert into jos_vm_product(fid,product_sku,product_name,product_url,product_length,product_weight,product_width) values ('$var1','$FBH','$FMC','$FDJ','$FGG','$FZL','$FTJ')";//写入数据  
    echo $sql;
    如果我将var1=1的话  可以写入mysql 
    但是就无法将oracle获取的$FBH等等 写入mysql
      

  26.   

    conn.php
    <?php//连接mysql数据库
    $database='test';  
    $username='root'; 
    $passwd='test123456'; 
    $server='192.168.50.2'; 
    //连接oracle数据库
    $conn = OCILogon("test", "test123456", '192.168.50.2:1521/HLDB');
     
    ?>
    1.php
    <?php 
    require('conn.php'); //查询   
       
       
    $stmt   =   OCIParse($conn,"SELECT FID,FBH,FMC,FDJ,FGG,FZL,FTJ FROM T_CPZL");   
      
      OCIDefineByName($stmt,"FID",&$FID);   
      OCIDefineByName($stmt,"FBH",&$FBH); 
     OCIDefineByName($stmt,"FMC",&$FMC);
     OCIDefineByName($stmt,"FDJ",&$FDJ);
     OCIDefineByName($stmt,"FGG",&$FGG);
     OCIDefineByName($stmt,"FZL",&$FZL);
     OCIDefineByName($stmt,"FTJ",&$FTJ);   OCIExecute($stmt);   
      
      
      while   (OCIFetch($stmt))   {   
          echo   "FID:".$FID."\n";   
          echo   "FBH:".$FBH."\n";   
      echo   "FMC:".$FMC."\n";   
          echo   "FDJ:".$FDJ."\n"; 
      echo   "FGG:".$FGG."\n";   
          echo   "FZL:".$FZL."\n"; 
      echo   "FTJ:".$FTJ."\n";   
          
      }   
      
      OCIFreeStatement($stmt);   
        OCILogoff($conn); 
    $sql="insert into jos_vm_product(fid,product_sku,product_name,product_url,product_length,product_weight,product_width) values ('$var1','$FBH','$FMC','$FDJ','$FGG','$FZL','$FTJ')";//写入数据  
    echo $sql;
    //检查变量值 
    echo "系统更新" . "<p>"; 
    $link=mysql_connect($server,$username,$passwd); //建立连接 if(!$link) 

    die( "数据库连接失败!" ); //如果连接失败就终止程序并提示错误 

    else 

    mysql_select_db($database,$link); //选择要操作的数据库 
    mysql_query($sql,$link); //执行sql语句 
    mysql_close($link); //关闭数据库 

    ?> 
      

  27.   


    从这上面的输出信息看,这里有输出了四次FID等信息,但是只有第一次有值,我想问一下,Orcal库里的数据有几条啊?都是有值的吗?
    我不了解OCIParse 的用法,不过,感觉你这里的使用好象有点不对,你是不是应该把这个insert语句放到循环里啊。
      

  28.   

    $stmt=OCIParse($con,$sql);
    OCIEXEcute($stmt);
    相当于mysql中的:
    mysql_query($stmt);
      

  29.   

    谢谢大家了  
    问题解决了 
    是OCIDefineByName那里重复了
    还有就是 我的sql insert应该放在循环里......呼呼 感谢大家 ...
      

  30.   

    楼主换个函数看看 将OCIFetch换成OCIFetchInto
      

  31.   

    举个例子:  $sql   =   "select   content   from   article   order   by   id   desc";   
      $stmt   =   @OCIParse($conn,$sql);   
      @OCIExecute($stmt,OCI_DEFAULT);   
      @OCIFetchInto($stmt,&$rows);   
      echo   "<br>Content   is:\"".$rows[0]."\"";