Manuel PHP
Précédent |  | Suivant

# LXXVIII. Oracle 8

# Introduction

Ces fonctions vous permettront d'accéder aux serveurs Oracle8 et Oracle7. Elles utilisent l'interface Oracle8 Call-Interface (oci8). Vous aurez donc besoin des bibliothèques clientes Oracle8 pour pouvoir les utiliser.

Il faut noter que cette extension est plus souple que l'ancienne extension Oracle. Elle supporte notamment les liaisons entre les variables globales et locales de PHP avec des emplacements Oracle; elle supporte complètement les types LOB, FILE et ROWID et vous permet d'utiliser des variables de définitions personnalisables. Il est recommandé d'utiliser cette fonction plutôt que l'ancienne extension Oracle.

# Pré-requis

Vous avez besoin des bibliothèques Oracles pour utiliser cette extension. Les utilisateur Windows doivent avoir Oracle version 8.1, et utiliser la bibliothèque `php_oci8.dll`.

Avant d'utiliser cette extension, assurez-vous que vous avez bien paramétré vos variables d'environnement Oracle, ainsi que votre démon utilisateur. Les variables dont vous pouvez avoir besoin sont :

- ORACLE_HOME

- ORACLE_SID

- LD_PRELOAD

- LD_LIBRARY_PATH

- NLS_LANG

- ORA_NLS33

Après avoir configuré ces variables pour votre utilisateur "serveur web", assurez-vous aussi d'ajouter cet utilisateur (nobody, www) au groupe Oracle.

> Si votre serveur web ne démarre pas ou plante au démarrage avec Oracle : Vérifiez que Apache a bien été compilé avec la bibliothèque pthread :

> Exemple 1. Configuration Apache avec 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)

> Si la libpthread n'est pas listée, vous devez réinstaller Apache :

> Exemple 2. Reinstaller Apache avec pthread

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

Notez bien que sur certains systèmes comme UnixWare il faut utiliser libthread au lieu de libpthread. PHP et Apache doivent alors être configurés avec EXTRA_LIBS=-lthread.

# Installation

Vous devez compiler PHP avec l'option --with-oci8[=DIR], où DIR vaut par défaut la variable d'environnement ORACLE_HOME.

# Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.

# Types de ressources

# Constantes prédefinies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

`OCI_DEFAULT` (integer)

  Mode d'exécution des commandes. La commande n'est pas validée automatiquement lorsqu'on utilise ce mode.

`OCI_DESCRIBE_ONLY` (integer)

  Mode d'exécution des commandes. Utilisez ce mode si vous ne souhaitez pas exécuter la commande, mais simplement obtenir des descriptions.

`OCI_COMMIT_ON_SUCCESS` (integer)

  Mode d'exécution des commandes. La commande est automatiquement validée après oci_execute().

`OCI_EXACT_FETCH` (integer)

  Mode de lecture de résultats. Utilisées lorsque les applications savent à l'avance le nombre de ligne qu'il faudra lire. Ce mode désactive la lecture anticipée d'Oracle version 8 et plus récente. Le curseur est annulé une fois que le nombre de lignes à lire a été atteint, et cela réduit les ressources consommée côté serveur.

`OCI_SYSDATE` (integer)

`SQLT_BFILEE` (integer)

  Utilisé avec la fonction oci_bind_by_name() pour relier des fichiers BFILE.

`SQLT_CFILEE` (integer)

  Utilisé avec la fonction oci_bind_by_name() pour relier des fichiers CFILE.

`OCI_B_CLOB` (integer)

  Utilisé avec oci_bind_by_name() pour relier des CLOB.

`OCI_B_BLOB` (integer)

  Utilisé avec oci_bind_by_name() pour relier des BLOB.

`OCI_B_ROWID` (integer)

  Utilisé avec oci_bind_by_name() pour relier des ROWID.

`OCI_B_CURSOR` (integer)

  Utilisé avec oci_bind_by_name() pour relier des curseurs, précédemment alloués avec oci_new_descriptor().

`OCI_B_NTY` (integer)

  Utilisé avec oci_bind_by_name() pour relier des noms de types de données.

`OCI_B_BIN` (integer)

`SQLT_BFILEE` (integer)

  Identique à `OCI_B_BFILE`.

`SQLT_CFILEE` (integer)

  Identique à `OCI_B_CFILEE`.

`SQLT_CLOB` (integer)

  Identique à `OCI_B_CLOB`.

`SQLT_BLOB` (integer)

  Identique à `OCI_B_BLOB`.

`SQLT_RDD` (integer)

  Identique à `OCI_B_ROWID`.

`SQLT_NTY` (integer)

  Identique à `OCI_B_NTY`.

`OCI_FETCHSTATEMENT_BY_COLUMN` (integer)

  Mode par défaut de oci_fetch_all().

`OCI_FETCHSTATEMENT_BY_ROW` (integer)

  Mode alternatif pour oci_fetch_all().

`OCI_ASSOC` (integer)

  Utilisé avec oci_fetch_all() et oci_fetch_array() pour lire un tableau associatif.

`OCI_NUM` (integer)

  Utilisé avec oci_fetch_all() et oci_fetch_array() pour lire un tableau énuméré.

`OCI_BOTH` (integer)

  Utilisé avec oci_fetch_all() et oci_fetch_array() pour lire un tableau associatif et énuméré.

`OCI_RETURN_NULLS` (integer)

  Utilisé avec oci_fetch_array() pour obtenir des éléments vides, si la valeur du champ est `NULL`.

`OCI_RETURN_LOBS` (integer)

  Utilisé avec oci_fetch_array() pour obtenir la valeur du LOB au lieu du pointeur.

`OCI_DTYPE_FILE` (integer)

  Cette option indique à oci_new_descriptor() d'initialiser un nouveau pointeur FILE.

`OCI_DTYPE_LOB` (integer)

  Cette option indique à oci_new_descriptor() d'initialiser un nouveau pointeur LOB.

`OCI_DTYPE_ROWID` (integer)

  Cette option indique à oci_new_descriptor() d'initialiser un nouveau pointeur ROWID.

`OCI_D_FILE` (integer)

  Identique à `OCI_DTYPE_FILE`.

`OCI_D_LOB` (integer)

  Identique à `OCI_DTYPE_LOB`.

`OCI_D_ROWID` (integer)

  Identique à `OCI_DTYPE_ROWID`.

# Exemples

Exemple 3. Exemple avec OCI8

`<?php
// par sergo@bacup.ru
// Utilisez l'option: OCI_DEFAULT pour exécuter la commande avec exécution
// retardée.
OCIExecute($stmt, OCI_DEFAULT);
// pour lire les données, après un fetch :
$result = OCIResult($stmt, $n);
if (is_object ($result)) $result = $result->load();
// Pour les commandes INSERT et UPDATE utilisez :
$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);
?>`

Vous pouvez facilement accéder aux procédures stockées, de la même façon que vous le feriez par ligne de commande :

Exemple 4. Utilisation de procédures stockées

`<?php
// par webmaster@remoterealty.com
$sth = OCIParse ( $dbh, "begin sp_newaddress( :address_id, '$firstname',
'$lastname', '$company', '$address1', '$address2', '$city', '$state',
'$postalcode', '$country', :error_code );end;" );
// Cela appelle la procédure stockée sp_newaddress, avec la variable :address_id
// pour les entrées/sorties et :error_code comme variable de sortie.
// Ensuite, vous faites les liaisons suivantes :
OCIBindByName ( $sth, ":address_id", $addr_id, 10 );
OCIBindByName ( $sth, ":error_code", $errorcode, 10 );
OCIExecute ( $sth );
?>`

Précédent | Sommaire | Suivant
deaggregate | Niveau supérieur | oci_bind_by_name