Podręcznik PHP
Poprzedni |  | Następny

# LXXXVII. Oracle 8 functions

# Wstęp

These functions allow you to access Oracle9, Oracle8 and Oracle7 databases. It uses the Oracle Call Interface (OCI).

This extension is more flexible than the old Oracle extension. It supports binding of global and local PHP variables to Oracle placeholders, has full LOB, FILE and ROWID support and allows you to use user-supplied define variables. You are recommended to use this extension instead of old Oracle extension where possible.

# Wymagania

You will need the Oracle client libraries to use this extension. Windows users will need at least Oracle version 8.1 to use the `php_oci8.dll` dll.

Before using this extension, make sure that you have set up your Oracle environment variables properly for the Oracle user, as well as your web daemon user. The variables you might need to set are as follows:

- ORACLE_HOME

- ORACLE_SID

- LD_PRELOAD

- LD_LIBRARY_PATH

- NLS_LANG

- ORA_NLS33

After setting up the environment variables for your webserver user, be sure to also add the webserver user (nobody, www) to the oracle group.

> If your webserver doesn't start or crashes at startup: Check that Apache is linked with the pthread library:

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

> If the libpthread is not listed you have to reinstall Apache:

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

> Please note that on some systems like UnixWare it is libthread instead of libpthread. PHP and Apache have to be configured with EXTRA_LIBS=-lthread.

# Instalacja

You have to compile PHP with the option --with-oci8[=DIR], where DIR defaults to your environment variable ORACLE_HOME.

If you're using Oracle Instant Client, you need to build PHP with the option --with-oci8-instant-client[=DIR]. Note that Oracle Instant Client support first appeared in versions 4.3.11 and 5.0.4.

# Konfiguracja czasu wykonywania

To rozszerzenie nie definiuje posiada żadnych dyrektyw konfiguracyjnych w pliku `php.ini`.

# Typy zasobów

# Stałe predefinopwane

Poniższe stałe są zdefiniowane w tym rozszerzeniu i stają się dostępne, gdy rozszerzenie jest dokompilowane do PHP, lub załadowane dynamicznie przy starcie.

`OCI_DEFAULT` (integer)

  Statement execution mode. Statement is not committed automatically when using this mode.

`OCI_DESCRIBE_ONLY` (integer)

  Statement execution mode. Use this mode if you don't want to really execute query, but only get select-list description.

`OCI_COMMIT_ON_SUCCESS` (integer)

  Statement execution mode. Statement is automatically committed after oci_execute() call.

`OCI_EXACT_FETCH` (integer)

  Statement fetch mode. Used when the application knows in advance exactly how many rows it will be fetching. This mode turns prefetching off for Oracle release 8 or later mode. Cursor is cancelled after the desired rows are fetched and may result in reduced server-side resource usage.

`OCI_SYSDATE` (integer)

`OCI_B_BFILE` (integer)

  Used with oci_bind_by_name() when binding BFILEs.

`OCI_B_CFILEE` (integer)

  Used with oci_bind_by_name() when binding CFILEs.

`OCI_B_CLOB` (integer)

  Used with oci_bind_by_name() when binding CLOBs.

`OCI_B_BLOB` (integer)

  Used with oci_bind_by_name() when binding BLOBs.

`OCI_B_ROWID` (integer)

  Used with oci_bind_by_name() when binding ROWIDs.

`OCI_B_CURSOR` (integer)

  Used with oci_bind_by_name() when binding cursors, previously allocated with oci_new_descriptor().

`OCI_B_NTY` (integer)

  Used with oci_bind_by_name() when binding named data types.

`OCI_B_BIN` (integer)

`SQLT_BFILEE` (integer)

  The same as `OCI_B_BFILE`.

`SQLT_CFILEE` (integer)

  The same as `OCI_B_CFILEE`.

`SQLT_CLOB` (integer)

  The same as `OCI_B_CLOB`.

`SQLT_BLOB` (integer)

  The same as `OCI_B_BLOB`.

`SQLT_RDD` (integer)

  The same as `OCI_B_ROWID`.

`SQLT_NTY` (integer)

  The same as `OCI_B_NTY`.

`OCI_FETCHSTATEMENT_BY_COLUMN` (integer)

  Default mode of oci_fetch_all().

`OCI_FETCHSTATEMENT_BY_ROW` (integer)

  Alternative mode of oci_fetch_all().

`OCI_ASSOC` (integer)

  Used with oci_fetch_all() and oci_fetch_array() to get an associative array as a result.

`OCI_NUM` (integer)

  Used with oci_fetch_all() and oci_fetch_array() to get an enumerated array as a result.

`OCI_BOTH` (integer)

  Used with oci_fetch_all() and oci_fetch_array() to get an array with both associative and number indices.

`OCI_RETURN_NULLS` (integer)

  Used with oci_fetch_array() to get empty array elements if field's value is `NULL`.

`OCI_RETURN_LOBS` (integer)

  Used with oci_fetch_array() to get value of LOB instead of the descriptor.

`OCI_DTYPE_FILE` (integer)

  This flag tells oci_new_descriptor() to initialize new FILE descriptor.

`OCI_DTYPE_LOB` (integer)

  This flag tells oci_new_descriptor() to initialize new LOB descriptor.

`OCI_DTYPE_ROWID` (integer)

  This flag tells oci_new_descriptor() to initialize new ROWID descriptor.

`OCI_D_FILE` (integer)

  The same as `OCI_DTYPE_FILE`.

`OCI_D_LOB` (integer)

  The same as `OCI_DTYPE_LOB`.

`OCI_D_ROWID` (integer)

  The same as `OCI_DTYPE_ROWID`.

# Przykłady

Przykład 1. OCI Hints

`<?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);
?>`

You can easily access stored procedures in the same way as you would from the commands line.

Przykład 2. Using Stored Procedures

`<?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);
?>`

Poprzedni | Spis treści | Następny
deaggregate | Początek rozdziału | oci_bind_by_name