LXXI. Oracle 8 函数库

介绍

这些函数允许你访问 Oracle8 和 Oracle7 数据库。这些函数使用 Oracle8 Call-Interface (OCI8)。

该扩展比 Oracle 标准函数扩展更灵活。支持向 Oracle 位置标志符绑定局部和全局 PHP 变量,全面支持 LOB、FILE 和 ROWID,允许用户使用用户自定义的变量。

需求

使用这个扩展需要 Oracle8 客户端库。

在使用这个扩展之前,请确认你已经为 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 库:

# ldd /www/apache/bin/httpd 
    libpthread.so.0 => /lib/libpthread.so.0 (0x4001c000)
    libm.so.6 => /lib/libm.so.6 (0x4002f000)
    libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004c000)
    libdl.so.2 => /lib/libdl.so.2 (0x4007a000)
    libc.so.6 => /lib/libc.so.6 (0x4007e000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

如果 libpthread 没有列出,你必需重新安装 Apache:

# cd /usr/src/apache_1.3.xx
# make clean
# LIBS=-lpthread ./config.status
# make
# make install

请注意在象 UnixWare 在内的某些操作系统中,使用libthread 代替 libpthread。则PHP 和 Apache 必须使用 EXTRA_LIBS=-lthread 配置。

安装

你必须使用选项 --with-oracle[=DIR] 编译 PHP , DIR 的默认值是环境变量 ORACLE_HOME。

运行时配置

该扩展模块未定义任何设置指令。

资源类型

预定义常量

由于这些常量是由该扩展模块定义的,因此只有在该扩展模块被编译到 PHP 中,或者在运行时被动态加载后,这些常量才有效。

OCI_DEFAULT (integer)

OCI_DESCRIBE_ONLY (integer)

OCI_COMMIT_ON_SUCCESS (integer)

OCI_EXACT_FETCH (integer)

SQLT_BFILEE (integer)

SQLT_CFILEE (integer)

SQLT_CLOB (integer)

SQLT_BLOB (integer)

SQLT_RDD (integer)

OCI_B_SQLT_NTY (integer)

OCI_SYSDATE (integer)

OCI_B_BFILE (integer)

OCI_B_CFILEE (integer)

OCI_B_CLOB (integer)

OCI_B_BLOB (integer)

OCI_B_ROWID (integer)

OCI_B_CURSOR (integer)

OCI_B_BIN (integer)

OCI_FETCHSTATEMENT_BY_COLUMN (integer)

OCI_FETCHSTATEMENT_BY_ROW (integer)

OCI_ASSOC (integer)

OCI_NUM (integer)

OCI_BOTH (integer)

OCI_RETURN_NULLS (integer)

OCI_RETURN_LOBS (integer)

OCI_DTYPE_FILE (integer)

OCI_DTYPE_LOB (integer)

OCI_DTYPE_ROWID (integer)

OCI_D_FILE (integer)

OCI_D_LOB (integer)

OCI_D_ROWID (integer)

范例

例子 1. OCI 提示

<?php
// by sergo@bacup.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@remoterealty.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 );

?>

目录
OCIBindByName --  绑定一个 PHP 变量到一个 Oracle 位置标志符
ocicancel -- 停止从游标读取数据
ocicollappend -- 该函数目前暂时没有参考文档
ocicollassign -- 该函数目前暂时没有参考文档
ocicollassignelem -- 该函数目前暂时没有参考文档
ocicollgetelem -- 该函数目前暂时没有参考文档
ocicollmax -- 该函数目前暂时没有参考文档
ocicollsize -- 该函数目前暂时没有参考文档
ocicolltrim -- 该函数目前暂时没有参考文档
ocicolumnisnull -- Test whether a result column is NULL
ocicolumnname -- Returns the name of a column
ocicolumnprecision -- 该函数目前暂时没有参考文档
ocicolumnscale -- 该函数目前暂时没有参考文档
ocicolumnsize -- Return result column size
ocicolumntype -- Returns the data type of a column
ocicolumntyperaw -- 该函数目前暂时没有参考文档
ocicommit -- 提交未执行的事务处理
OCIDefineByName --  Use a PHP variable for the define-step during a SELECT
OCIError -- Return the last error of stmt|conn|global
ociexecute -- 执行一条语句
ocifetch -- Fetches the next row into result-buffer
ocifetchinto -- Fetches the next row into result-array
ocifetchstatement -- Fetch all rows of result data into an array
ocifreecollection -- 该函数目前暂时没有参考文档
ocifreecursor --  释放某个游标的所有相关资源
ocifreedesc -- Deletes a large object descriptor
ocifreestatement --  Free all resources associated with a statement
ociinternaldebug --  Enables or disables internal debug output
ociloadlob -- 该函数目前暂时没有参考文档
ocilogoff -- 从 Oracle 断开连接
ocilogon -- Establishes a connection to Oracle
ocinewcollection -- 该函数目前暂时没有参考文档
ocinewcursor --  Return a new cursor (Statement-Handle)
ocinewdescriptor --  Initialize a new empty LOB or FILE descriptor
ocinlogon -- Establishes a new connection to Oracle
ocinumcols --  Return the number of result columns in a statement
ociparse -- 分析一个查询并返回语句标志符
ociplogon --  Connect to an Oracle database using a persistent connection
ociresult -- Returns column value for fetched row
ocirollback -- Rolls back outstanding transactions
ocirowcount -- Gets the number of affected rows
ocisavelob -- 该函数目前暂时没有参考文档
ocisavelobfile -- 该函数目前暂时没有参考文档
ociserverversion -- 返回一个包含服务器版本信息的字符串
ocisetprefetch -- Sets number of rows to be prefetched
ocistatementtype -- 返回 OCI 命令的类型
ociwritelobtofile -- 该函数目前暂时没有参考文档