LXXVII. 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 库:

# 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 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);

?>

目录
oci_bind_by_name --  Binds the PHP variable to the Oracle placeholder
oci_cancel -- Cancels reading from cursor
oci_close -- Closes Oracle connection
collection->append -- Appends an object to the collection
collection->assign -- Assigns a value to the collection from another existing collection
collection->assignElem -- Assigns a value to the element of the collection
collection->getElem -- Returns value of the element
collection->max -- Gets the maximum number of elements in the collection
collection->size -- Returns size of the collection
collection->trim -- Trims elements from the end of the collection
oci_commit -- Commits outstanding statements
oci_connect -- Establishes a connection to Oracle server
oci_define_by_name --  Uses a PHP variable for the define-step during a SELECT
oci_error -- Returns the last error found
oci_execute -- Executes a statement
oci_fetch_all -- Fetches all rows of result data into an array
oci_fetch_array -- Returns the next row from the result data as an associative or numeric array, or both
oci_fetch_assoc -- Returns the next row from the result data as an associative array
oci_fetch_object -- Returns the next row from the result data as an object
oci_fetch_row -- Returns the next row from the result data as a numeric array
oci_fetch -- Fetches the next row into result-buffer
oci_field_is_null -- Checks if the field is NULL
oci_field_name -- Returns the name of a field from the statement
oci_field_precision -- Tell the precision of a field
oci_field_scale -- Tell the scale of the field
oci_field_size -- Returns field's size
oci_field_type_raw -- Tell the raw Oracle data type of the field
oci_field_type -- Returns field's data type
collection->free -- Frees resources associated with collection object
descriptor->free -- Frees resources associated with descriptor
oci_free_statement --  Frees all resources associated with statement or cursor
oci_internal_debug -- Enables or disables internal debug output
lob->append -- Appends data from the large object to another large object
lob->close -- Closes LOB descriptor
oci_lob_copy -- Copies large object
lob->eof -- Tests for end-of-file on a large object's descriptor
lob->erase -- Erases a specified portion of the internal LOB data
lob->export -- Exports LOB's contents to a file
lob->flush -- Flushes/writes buffer of the LOB to the server
lob->import -- Imports file data to the LOB
oci_lob_is_equal -- Compares two LOB/FILE locators for equality
lob->load -- Returns large object's contents
lob->read -- Reads part of large object
lob->rewind -- Moves the internal pointer to the beginning of the large object
lob->save -- Saves data to the large object
lob->seek -- Sets the internal pointer of the large object
lob->size -- Returns size of large object
lob->tell -- Returns current position of internal pointer of large object
lob->truncate -- Truncates large object
lob->writeTemporary -- Writes temporary large object
lob->write -- Writes data to the large object
oci_new_collection -- Allocates new collection object
oci_new_connect -- Establishes a new connection to the Oracle server
oci_new_cursor -- Allocates and returns a new cursor (statement handle)
oci_new_descriptor -- Initializes a new empty LOB or FILE descriptor
oci_num_fields --  Returns the number of result columns in a statement
oci_num_rows -- Returns number of rows affected during statement execution
oci_parse -- Prepares Oracle statement for execution
oci_password_change -- Changes password of Oracle's user
oci_pconnect -- Connect to an Oracle database using a persistent connection
oci_result -- Returns field's value from the fetched row
oci_rollback -- Rolls back outstanding transaction
oci_server_version -- Returns server version
oci_set_prefetch -- Sets number of rows to be prefetched
oci_statement_type -- Returns the type of an OCI statement
ocibindbyname --  绑定一个 PHP 变量到一个 Oracle 位置标志符
ocicancel -- 停止从游标读取数据
ocicloselob -- 关闭 lob 描述符
ocicollappend -- 该函数目前暂时没有参考文档
ocicollassign -- 该函数目前暂时没有参考文档
ocicollassignelem -- 该函数目前暂时没有参考文档
ocicollgetelem -- 该函数目前暂时没有参考文档
ocicollmax -- 该函数目前暂时没有参考文档
ocicollsize -- 该函数目前暂时没有参考文档
ocicolltrim -- 该函数目前暂时没有参考文档
ocicolumnisnull -- 测试一个结果列是否是 NULL
ocicolumnname -- 返回列名
ocicolumnprecision -- 告知某列的精度
ocicolumnscale -- 告诉某列的范围
ocicolumnsize -- 返回列的大小
ocicolumntype -- 返回列的数据类型
ocicolumntyperaw -- 告知某列的原始 oracle 数据类型
ocicommit -- 提交未执行的事务处理
ocidefinebyname --  在一个 SELECT 中使用一个 PHP 变量作为定义的步骤
ocierror -- 返回 stmt|conn|global 的最后的错误
ociexecute -- 执行一条语句
ocifetch -- 获取下一行到结果缓冲区
ocifetchinto -- 获取下一行到一个数组
ocifetchstatement -- 获取结果数据的所有行到一个数组
ocifreecollection -- 该函数目前暂时没有参考文档
ocifreecursor --  释放某个游标的所有相关资源
ocifreedesc -- 删除一个大对象描述符
ocifreestatement --  释放所有语句的相关资源
lob->getBuffering -- Returns current state of buffering for large object
ociinternaldebug --  打开或关闭内部调试输出
ociloadlob -- 装载一个大对象
ocilogoff -- 从 Oracle 断开连接
ocilogon -- 确立一个到 Oracle 的连接
ocinewcollection -- 该函数目前暂时没有参考文档
ocinewcursor --  返回一个新的游标(语句句柄)
ocinewdescriptor --  初始化一个新的空 LOB 或 FILE 描述符
ocinlogon -- 确定一个到 Oracle 的新连接
ocinumcols --  返回列数
ociparse -- 分析一个查询并返回语句标志符
ociplogon --  使用一个持续性连接连到 Oracle 数据库
ociresult -- 返回所取得行的列值
ocirollback -- 回滚未提交的事务
ocirowcount -- 获取受影响的行数
ocisavelob -- 保存一个大对象
ocisavelobfile -- 保存一个大对象文件
ociserverversion -- 返回一个包含服务器版本信息的字符串
lob->setBuffering -- Changes current state of buffering for large object
ocisetprefetch -- 设置预取行数
ocistatementtype -- 返回 OCI 命令的类型
ociwritelobtofile -- 保存一个大对象文件
ociwritetemporarylob -- 写一个临时的 blob