ODBC、oracle的专用接口,如果WEB服务器和oracle没在一台机器上的话,你就必须在WEB服务器上装oracle的客户端,我试过只有JDBC可以不使用oracle的客户端就可以和服务端建立联接,当然如果你不想专oracle的客户端的话就必须自己把一些必须的DLL文件手动添加。

解决方案 »

  1.   

    前面的懂,这句“当然如果你不想专oracle的客户端的话就必须自己把一些必须的DLL文件手动添加。”,不懂。在php中也有改动的吧。ODBC我用过JDBC是怎么一回事,是java中的吗 
      

  2.   

    jdbc是用java写的一种数据接口功能和odbc一样。至于“当然如果你不想装oracle的客户端的话就必须自己把一些必须的DLL文件手动添加。”你看一下下面这篇文章就知道了:Client端不安裝Oracle的方法廣東中山   謝殿宏2001/04/03 前言:曾在網上見到許多人問Client端不安裝Oracle而使PB程序連上後臺Oracle資料庫的方法,本人從事pb+oracle開發已有些時日,每次都得安裝Oracle的Client端程式,而我面對的Client端則有幾百個之多,工作量可以想象何其大,所以就在這方面動了下腦筋,經過反復試驗,終於搞定. 開發環境:    前臺:Pb6.5+win95+Oracle 7.3.4 Client    後臺:Redhat Linux 6.2+Oracle 8.1.6 有關Oracle資料庫別名的配置:(%Oracle_homes% 表示Oracle的安裝目錄)  當在SQL NetEasy Configuration中配置Oracle資料庫別名時,與SQL Server 7和ODBC不同的是  Oracle並沒有把資料庫別名資訊寫入註冊表中,而是寫入了一個文本文件之中:  %Oracle_homes%\network\admin\tnsnames.ora,(此文件與同目錄下的sqlnet.ora一起使用),當運行pb程序的時候,實際上在讀取這兩文件中的數據庫配置信息. 應用程序運行所需要的文件:檔案名稱
     文件來源
     
    Pbvm60.dll
     C:\program files\Sybase\share  必不可少
     
    Pbdwe60.dll
     C:\program files\Sybase\share  必不可少
     
    Pbo7360.dll
     C:\program files\Sybase\share  必不可少
     
    Ociw32.dll
     %Oracle_homes%\bin  必不可少
     
    Core35o.dll
     %Oracle_homes%\bin  必不可少
     
    Nlsrtl32.dll
     %Oracle_homes%\bin  必不可少
     
    Core35.dll
     %Oracle_homes%\bin  必不可少
     
    Ora73.dll
     %Oracle_homes%\bin  必不可少
     
    Ncrnt.dll
     %Oracle_homes%\bin  必不可少
     
    Nnfnnt.dll
     %Oracle_homes%\bin  必不可少
     
    Nnfdnt.dll
     %Oracle_homes%\bin  必不可少
     
    Ntnt.dll
     %Oracle_homes%\bin  必不可少
     
    Otrace73.dll
     %Oracle_homes%\bin  必不可少
     
    Nlnt.dll
     %Oracle_homes%\bin  必不可少
     
    Nasnsnt.dll
     %Oracle_homes%\bin  必不可少
     
    Nsnt.dll
     %Oracle_homes%\bin  必不可少
     
    Sqltnsnt.dll
     %Oracle_homes%\bin  必不可少
     
    Nttnt.dll
     %Oracle_homes%\bin  必不可少
     
    Ntnnt.dll
     %Oracle_homes%\bin  必不可少
     
    Tnsnames.ora
     %Oracle_homes%\network\admin  必不可少
     
    Sqlnet.ora
     %Oracle_homes%\network\admin  必不可少
     
    Lx*.nlb
     %Oracle_homes%\nlsrtl32\data  共有414個文件,其中,Lx3*.nlb(63個文件)不需要,其餘351個文件是必不可少的,全部文件大小不超過2M, 
      測試環境:     我找了一台新電腦,裝上Win98,建立一個新目錄:C:\test,將上述文件copy到此目錄下,    再修改註冊表:\\HKEY_LOCAL_MACHINE\SOFTWARE下的內容    在SOFTWARE下新增一個子鍵:ORACLE    選擇ORACLE,在對應右窗格內新增兩個串值:    NLSRTL32     其值爲:C:\TEST    NLS_LANG  其值爲:TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5     其中,NLSRTL32是爲*.NLB文件指明搜索路徑,NLS_LANG則是指明ORACLE的符集,我  測試時用的是繁體中文.     其後我又找了兩台未裝ORACLE的電腦測試,屢試不爽. 說明:若是PB7或ORACLE8,上述文件請對照更改,有一些dll文件是位於C:\windows\system下,如:netbios.dll等是Windows自有的,所以未列入,實際作業時請酌情考慮. 借助工具:http://download.tiandown.com/pub/software/develop/dev-inst/setup6.exe    Sax Setup是一個相當簡單易用的安裝打包工具,它有一個最大的特點就是能偵測出應用程序運行時所需要的dll文件,但不能偵測出其他類型的文件,且要註冊版本才行.Sax Setup 6.0 的註冊碼:3160-3194666-18 後記:以上過程,我花了近4天的時間,希望能為pb+oracle的開發者有所幫助,但請各位轉貼時,   注明出處,尊重作者勞動,以上內容如有不正確的地方也請來信指出,多多交流.
      

  3.   

    谢谢你,但是用php和orcal这样子也可以吗?不过这是暂时的,以后会用java的。
    有php和orcal综合的网站吗?我几乎找不到。我需要实例。
      

  4.   

    我去年7月份的时候做过一个PHP for linux、oracle for linux的网站,没有完成在最后测试阶段时甲方因种种原因毁了合约,PHP如果不能在WINDOWS上使用大部分原因是不支持建议你把PHP升级到最新版本,如果WEB服务器和oracle没在一台机器上的话,你就必须在WEB服务器上装oracle的客户端,“有php和orcal综合的网站吗?”即使有你也只能看出来它是用PHP做的至于后台用什么数据库是看不出来的。下面这一段是我做程序时联接数据库的那一段希望对你有用:
    <?
    putenv("ORACLE_SID=ORCL");
    putenv("ORACLE_HOME=/u1/app/oracle/product/8.0.5");
    $handle = ora_logon("用户名@主机标识符(注:1)","密码") or die; 
    $cursor=ora_open($handle); 
    ora_commitoff($handle);
    ?>
    注1:@后面的叫什么记不清了,就是那个联接oracle数据库都必须建的东东的名字。
      

  5.   

    在网上找到一个例子,你去看看吧http://phporacleadmin.org/
      

  6.   

    谢谢,你有信箱吗,可以联系吗。我就做php orcal java linux的电子商务网站,不过我是菜鸟,这对我有很大难度。
      

  7.   

    问题大家可以一起讨论,不过我只能给你一些提示至于具体工作还得由你自己来做,我的信箱是[email protected],我第一次做的就是PHP for linux、oracle for linux。
      

  8.   

    用你的就是像上面说的那样
    下面是我写的测试程序
    我是在客户端,可是说连不上啊
    测试程序
    <? 
    //文件名为test.php. 
    $conn=ocilogon("cht","1","chttest"); 
    if($conn) 
    echo success; 
    else 
    echo fail; 
    ?> 
    提示信息
    Warning: _oci_open_server: ORA-12154: TNS:无法处理服务名 in e:\page\dzsw\test.php on line 3
    fail 
      

  9.   

    在linux下用sqlplus(好像是这个程序oracle带的)试一下用和"ocilogon("cht","1","chttest")"相同参数是否能联上oracle。
      

  10.   

    找到一篇文章希望对你有用:
    浅谈Windows下PHP4与Oracle8的连接设置  PHP在Linux/Unix下连接oracle8是很容易的事,但在windows平台下实在不易,本人经过长久的摸索才找到可靠的方法,不敢独享, 
    现公布出来以飨大家。 笔者使用的开发环境: windows 98 第二版 php4.04pl1 apache 1.3.14 window版 oracle 8.05客户端 PHP以CGI方式安装完毕测试成功后。以以下代码测试 
    <?php 
    $conn = OCILogon("cinmsiii","cinmsiii","(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.202)(PORT = 1521))(CONNECT_DATA = (SID = unicom)))"); 
    //$conn=OCILogon("cinmsiii","cinmsiii","cinms");如果oracle客户端是8.1.6i的话可以这样用,参数照上 if($conn!=false) 

    echo "ok"; 
    OCILogoff($conn); 

    else 
    echo "false"; 
    ?> 关于连接参数问题: 
    连接串设为以下: 
    (DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.202)(PORT = 1521))(CONNECT_DATA = (SID = unicom))) PROTOCOL:为使用的网络协议 HOST:为数据库服务器主机名 SID:为数据库的实例号 这样作后一般没有任何问题。 如果你的oracle 8客户端为 8.1.6i企业版,可以把这些参数设在连接串中,用 oracle8的net easy config实用工具设置。 
    将设置后的连接串名称作为连接串传入。 推测oracle 7.x也可以用此方法,因没有环境,未作测试,如果你有兴趣可以试试。 
      

  11.   

    oracle database access object
    摘自:不详
     -------------------------------------------------------------------------------- 
    Calling example:
    <?
    $conn = OCILogon("www_cec", "webchn99", "unicorn");
    #or you can just inclued file like "include("modcec_OCI_conn.php3");"$newOda= new ODA($conn);
    #################
    #or you can use login method like this
    #$newOda-=new ODA();
    #$newOda->Logon("www","99","corn");
    ###############################################
    $newOda->CmdString=" update test set nouse='dfs' where login_name='guoyafeng'";
    if(!$newOda->Execute()) {
    echo $newOda->err;
    }
    else
    {
    echo $newOda->Rows;  #get the affected row number.
    }
    #or you can call execute like this####
    /*
    $newOda->Execute(" update test set nouse='dfs' where login_name='guoyafeng'");
    */
    ##############################the following demostrate the open method.
    $newOda->Open("select * from test")) or die $newOda->err;#Get data from RS
    echo "count is" .$newOda->Rows;
    for($i=0;$i<$newOda->Rows;$i++)
       for($j=0;$j<$newOda->Cols;$j++)
        {
           echo $newOda->RS[$i][$j];
           
           }
    $newOda->Logoff();
    ?>
    <?
    /********************************************************************************#
    #  File Name:ODA.php3                                                            #
    #  Author:Guo Yafeng                                    #
    #  Function: Oracle DB Access.                          #
    #  Maint History:                                                                #
    #         Sept 18,2000 first release.                                            #
    #                                                                                #
    #                                                                                #
    #********************************************************************************/
    /********************************************************************************#
    #Object interface description:                                                   #
    #  Properties:                                                                   #
    #       conn                Connection Object                                    #
    #       err_no              Error No                                             #
    #       err                 Error Description                                    #
    #       CmdString           SQL Statements to execute.                           #
    #       Rows               Affected Rows.                                      #
    #       RS                  Return value array.                                  
    #      Cols                                                                                         #
    #                                                                                #
    #  Method:                                                                       #
    #       Open                Execute the CmdString and return value               #
    #       Execute             Execute the CmdString.                               #
    #********************************************************************************/   file://$conn = OCILogon("www_ce", "ceonline99", "wsgp");
      // $conn = OCILogon("www_cec", "webchn99", "unicorn");
    //  if ($SERVER_NAME == "")
    //          $SERVER_NAME = $HTTP_HOST;class ODA
    {
      
      
      function ODA($cn="") {   if($cn!="")
        $this->conn=$cn;
        return TRUE;
      
      }
      
      function Logon($user,$pass,$db) {
      
        if(!($this->conn = OCILogon($user, $pass, $db))){
        
         $this->err_no=106;
         $this->err="Error 106: Failed to logon.";
         return FALSE;
        };
        
        return TRUE;
        
      }
      function Open($sql="") file://$this->CmdString
      {
         if($this->conn=="") {
            $this->err_no=100;
            $this->err="Error 100,Connection Object Required.";
            return FALSE;
          }
         
         if($sql=="" and $this->CmdString=="") {
            $this->err_no=101;
            $this->err="Error 101,SQL Statement Required.";
            return FALSE;
          }
         if($sql=="")
            $sql=$this->CmdString;
        if(!($cursor=OCIParse($this->conn,$sql))) {
           $this->err_no=102;
           $this->err="Server Internal Error: Failed to parse SQL Statement.";
           return FALSE;
        }
        
        if(!OCIExecute($cursor))  {
          $this->err_no=103;
          $this->err="Server Internal Error: Failed to execute SQL Statement.";
          return FALSE;
        }
        $this->Rows=0;
        while(OCIFetchInto($cursor,$this->RS[$this->Rows])){
        
          $this->Rows++;
          
         }
         $this->Cols=OCINumCols($cursor);    if($this->Rows==0) {
        
         $this->err_no=104;
         $this->err="Warning: No rows affectted.RS result is not available.";
        }     OCIFreeStatement($cursor);
         
         return TRUE;
      }
      
      
        function Execute($sql="") {
         if($this->conn=="") {
            $this->err_no=100;
            $this->err="Error 100,Connection Object Required.";
            return FALSE;
          }
        
         if($sql=="" and $this->CmdString=="") {
            $this->err_no=101;
            $this->err="Error 101,SQL Statement Required.";
            return FALSE;
          }
         if($sql=="")
            $sql=$this->CmdString;
        
        if(!($cursor=OCIParse($this->conn,$sql))) {
           $this->err_no=102;
           $this->err="Server Internal Error: Failed to parse SQL Statement.";
           return FALSE;
        }
       
        
        if(!OCIExecute($cursor))  {
          $this->err_no=103;
          $this->err="Server Internal Error: Failed to execute SQL Statement.";
          return FALSE;
        }
        $this->Rows=OCIRowCount($cursor);
        OCIFreeStatement($cursor);
        
        return TRUE;
      }
      function LogOff(){
      
      if(!OCILogoff($conn)){
        
        $this->err_no=105;
        $this->err="Server Internal Error: Failed to logoff database.";
        return FALSE;
       }
      return TRUE;
      
      }
    }
    ?>
      

  12.   

    是不是你没有配置PHP.ini文件。如果是你打开PHP.ini文件在
    ;Windows Extensions下面你会看到
    ;extension=php_oci8.dll
    ;extension=php_openssl.dll
    ;extension=php_oracle.dll
    把php_oci8.dll和php_oracle.dll前的“;”去掉,还有一个地方需要注意就是
    extension_dir = ./
    上面这个是用来设置php_oracle.dll等你需要装载的文件所在的位置。
    配置完要重启IIS的服务才会生效。
      

  13.   

    忘了说了如果你用的是OCI就对应的是php_oci8.dll,如果是ora对应的是php_oracle.dll,不最好用OCI,OCI好像是oracle的标准。
      

  14.   

    不行,我配置过了,不行。不过没加extension_dir这句,可是加了,执行php.exe错误还是一样的。说找不到dll文件,可是在extension中还是有的dll的呀。搞不明白
      

  15.   

    在linux上,我可帮你,编译是apache-with-oci8那吗?
      

  16.   

    执行php.exe说找不到所需要的dll文件,“;”去掉了,设置装载文件所在位置也弄好了,可就是不行。在ie中看那个测试连接的程序很慢慢,而且没有结果出来
    接alt+ctrl+del在关闭程序中可以看到php,关闭后ie中会出现internal server error Apache/1.3.14 Server at localhost Port 80.若加上注释;则hello的测试程序可以通过,此时若执行测试连接程序则会出现不知道函数名ocilog,我想我是正常 的,可是去掉注释后,怎么会这样呢。在extension目录下,有这样的dll文件啊
    而且有人说把它放到system下,并改include_path为php.exe和oci.dll的路径,我做过后,还是不行
      

  17.   

    我这几天去出差了所以没有上CSDN。从你说的情况我无法判断,现在我也不知道怎么解决了。实在不行你试试ODBC,我曾经用过ODBC连linux下的oracle没有出什么错很顺利就通过了。
      

  18.   

    你用的是apache等我再查关于apache要怎么设置
      

  19.   

    在WIN98下安装PHP4+ PERSONAL ORACLE8I 
    Personal oracle8i是ORALCE数据库一个成熟的版本,简直就是ORACLE8i的浓缩版。允许程序或其他系统人员在单机上对ORACLE进行开发或学习工作,而不必在企业的数据库上进行,不需要高级的配置环境。对于想学习ORACLE的朋友来说,是一个非常适合的环境。 
    Personal oracle8i对系统的最第要求是:32MB内存,85MB磁盘空间。 
    相关下栽: 
    APACHE1.3.14: www.apache.org 
    php4.0.3 pl1: www.php.net 
    Personal Oracle8iR2(8.1.6): www.oracle.com 
    我的机器配置为MMX166,64MB EDO内存,10GB硬盘。 
    操作系统是:WIN98SE(OEM) 
    我试过D版的win98se,可是Personal ORACLE8i的NET8一直不能装上,所以劝大家还是不要用D版的WIN98来安装。 
    1. 安装personal oracle8i将下载后的ZIP文件进行解压,运行setup,稍等片刻后,即可看到PERSONLAL ORACLE的安装界面,按下一步,输入ORACLE的安装路径和HOME NAME,选择典型安装,这时安装界面的右上角会有一进度条,大概60%左右会弹出警告栏,说内存小于96MB,可能会出错什么的,不必理会,继续,好了,当出现下一个画面的时候,ORACLE8i开始安装了。如果在安装过程中出现有什么错误提示,说什么文件不能写入的话,不必理会,按忽略,这对数据库的安装没有什么影响。数据库安装完成之后,会自动执行net8配置助手,数据库设置助手等工具来设置客户端与数据库,其中会需要输据数据库的全局名称和SID,我们设置为“TEST”,这时要有点耐心,着需要很长的一段时间来完成数据库的设置。最后,当提示oracle成功安装的时候,这才算安装完成了。 
    2.安装PHP4.0.3pl1:将下载的ZIP文件解压到一目录,如“c:\apache\php",将php.ini-ist文件拷贝,并对以下几列进行修改: 
    指明路径: 
    doc_root=c:\apache\htdocs 
    extension_dir=c:\apache\php\extensions 
    去掉以下两行前面的“;”号: 
    extension=php_oci8.dll 
    extension=php_oracle.dll 
    3.安装APACHE1.3.14:下载后直接运行安装文件,按照提示进行安装即可。 
    在.\conf\http.conf中加入以下几行: 
    ScriptAlias /php/ "C:/apahce/php/" 
    Action application/x-httpd-php "/php/php.exe" 
    AddType application/x-httpd-php .php 
    AddType application/x-httpd-php .php3 
    4.测试apahce:在开始菜单中启动APACHE服务,在IE地址栏中输入127.0.0.1,看到APACHE欢迎的画面,说明APACHE工作正常了。 
    5.测试PHP:使用文本编辑器,编辑PHP文件: 
    <? 
    //文件名为info.php 
    phpinfo(); 
    ?> 
    在IE地址栏中输入127.0.0.1/info.php,可以看到PHP的环境参数,如果找到有oricle和orci8的支持,说明PHP已经支持ORACLE和OCI8了。 
    6.测试与ORACLE的连接: 
    首先要配置好ORACLE客户端,我们可以使用NET8 CONFIGURATION ASSISTANT来配置,ORACLE网络端配置成功后,使用以下程序进行测试: 
    <? 
    //文件名为test.php. 
    $conn=ocilogon("system","manager","test"); 
    if($conn) 
    print"oracle数据库连接成功"; 
    else 
    print"oracle数据库连接失败"; 
    ?> 
    如果该程序返回成功标志,则表明连接成功了。如果要连接远程数据库,只需要在NET8 CONFIGURATION ASSISTANT中进行配置就可以了。