LXXXVIII. 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.ini 中未定义任何设置指令。

预定义常量

以下常量由本扩展模块定义,因此只有在本扩展模块被编译到 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
OCI-Collection->append -- Appends an object to the collection
OCI-Collection->assign -- Assigns a value to the collection from another existing collection
OCI-Collection->assignElem -- Assigns a value to the element of the collection
OCI-Collection->getElem -- Returns value of the element
OCI-Collection->free -- Frees resources associated with collection object
OCI-Collection->max -- Gets the maximum number of elements in the collection
OCI-Collection->size -- Returns size of the collection
OCI-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
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 -- ¸æ֪ijÁеľ«¶È
ocicolumnscale -- ¸æËßijÁеķ¶Î§
ocicolumnsize -- ·µ»ØÁеĴóС
ocicolumntype -- ·µ»ØÁеÄÊý¾ÝÀàÐÍ
ocicolumntyperaw -- ¸æ֪ijÁеÄԭʼ oracle Êý¾ÝÀàÐÍ
ocicommit -- ÌύδִÐеÄÊÂÎñ´¦Àí
ocidefinebyname --  ÔÚÒ»¸ö SELECT ÖÐʹÓÃÒ»¸ö PHP ±äÁ¿×÷Ϊ¶¨ÒåµÄ²½Öè
ocierror -- ·µ»Ø stmt|conn|global µÄ×îºóµÄ´íÎó
ociexecute -- Ö´ÐÐÒ»ÌõÓï¾ä
ocifetch -- »ñÈ¡ÏÂÒ»Ðе½½á¹û»º³åÇø
ocifetchinto -- »ñÈ¡ÏÂÒ»Ðе½Ò»¸öÊý×é
ocifetchstatement -- »ñÈ¡½á¹ûÊý¾ÝµÄËùÓÐÐе½Ò»¸öÊý×é
ocifreecollection -- ¸Ãº¯ÊýÄ¿Ç°ÔÝʱûÓвο¼Îĵµ
ocifreecursor --  ÊÍ·Åij¸öÓαêµÄËùÓÐÏà¹Ø×ÊÔ´
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