|  | 
 LXXIV. Oracle 8 函数库介绍
     这些函数允许你访问 Oracle8 和 Oracle7
     数据库。这些函数使用 Oracle8 Call-Interface (OCI8)。
     
     该扩展比 Oracle 标准函数扩展更灵活。支持向
     Oracle 位置标志符绑定局部和全局 PHP 变量,全面支持 LOB、FILE
     和 ROWID,允许用户使用用户自定义的变量。
    需求
    使用这个扩展需要 Oracle8 客户端库。Windows
    用户需要至少 Oracle  8.1 来使用
    php_oci8.dll。
    
    在使用这个扩展之前,请确认你已经为 Oracle 用户和 web daemon
    用户正确设置了 Oracle 环境变量。下面列出了需要设置的环境变量:
     
       ORACLE_HOME
      
       ORACLE_SID
      
       LD_PRELOAD
      
       LD_LIBRARY_PATH
      
       NLS_LANG
      
       ORA_NLS33
      
 
    在为 web 服务器用户设置环境变量之后,你还需要将 web
    服务器用户(nobody、 www)加到 oracle 组中。
    如果你的 web 服务器不能够启动或者在启动的时候崩溃: 
     检查 Apache 是否使用了 pthread 库: 
     
      
     如果 libpthread 没有列出,你必需重新安装 Apache:
     
      
     请注意在象 UnixWare 在内的某些操作系统中,使用libthread
     代替 libpthread。则PHP 和 Apache 必须使用 EXTRA_LIBS=-lthread 配置。
    
安装
  你必须使用选项
  --with-oracle[=DIR] 编译 PHP ,
 DIR 的默认值是环境变量 ORACLE_HOME。
 预定义常量
由于这些常量是由该扩展模块定义的,因此只有在该扩展模块被编译到 PHP 中,或者在运行时被动态加载后,这些常量才有效。范例
     | 例子 1. OCI 提示 | 
<?php// by sergo at bacup dot ru
 
 // Use option: OCI_DEFAULT for execute command to delay execution
 OCIExecute($stmt, OCI_DEFAULT);
 
 // for retrieve data use (after fetch):
 
 $result = OCIResult($stmt, $n);
 if (is_object($result)) $result = $result->load();
 
 // For INSERT or UPDATE statement use:
 
 $sql = "insert into table (field1, field2) values (field1 = 'value',
 field2 = empty_clob()) returning field2 into :field2";
 OCIParse($conn, $sql);
 $clob = OCINewDescriptor($conn, OCI_D_LOB);
 OCIBindByName($stmt, ":field2", &$clob, -1, OCI_B_CLOB);
 OCIExecute($stmt, OCI_DEFAULT);
 $clob->save("some text");
 OCICommit($conn);
 
 ?>
 | 
 | 
 
     你可以使用与命令行相同的方法来访问存储过程。
     | 例子 2. 使用存储过程 | 
<?php// by webmaster at remoterealty dot com
 $sth = OCIParse( $dbh, "begin sp_newaddress( :address_id, '$firstname',
 '$lastname', '$company', '$address1', '$address2', '$city', '$state',
 '$postalcode', '$country', :error_code );end;");
 
 // This calls stored procedure sp_newaddress, with :address_id being an
 // in/out variable and :error_code being an out variable.
 // Then you do the binding:
 
 OCIBindByName($sth, ":address_id", $addr_id, 10);
 OCIBindByName($sth, ":error_code", $errorcode, 10);
 OCIExecute($sth);
 
 ?>
 | 
 | 
 |  |