oci_error
oci_fetch_all
Fonctions OCI8
PHP Manual

# oci_execute

(PHP 5, PECL OCI8 >= 1.1.0)

oci_execute — Exécute une commande SQL Oracle

### Description

bool oci_execute ( resource `$statement` [, int `$mode` = OCI_COMMIT_ON_SUCCESS ] )

Exécute une requête `statement` précédemment retournée par la fonction oci_parse().

Après exécution, les requêtes comme INSERT auront par défaut les données validées (commitées) sur la base de données. Pour les requêtes comme SELECT, l'exécution effectue la logique de la requête. Les résultats de la requête peuvent être récupérés par PHP avec des fonctions comme oci_fetch_array().

Chaque requête analysé peut être exécutée plusieurs fois, inutile donc de les analyser de nouveau. Ceci est pratique pour des requêtes de type INSERT lorsque des données y sont liées grâce à la fonction oci_bind_by_name().

### Liste de paramètres

`statement`

  Un identifiant de requête OCI valide.

`mode`

  Un second paramètre optionnel peut prendre une des constantes suivantes :

  Modes d'exécution
  Constante | Description
  --- | ---
  `OCI_COMMIT_ON_SUCCESS` | Validation automatique sur la connexion lorsque la requête a été exécutée avec succès. C'est le comportement par défaut.
  `OCI_DESCRIBE_ONLY` | Rend les méta-donnes de la requête disponible aux fonctions comme oci_field_name() mais ne crée pas de jeu de résultats. Tout appel à des fonctions de récupération comme oci_fetch_array() échouera.
  `OCI_NO_AUTO_COMMIT` | Ne valide pas automatiquement les modifications. Avant PHP 5.3.2 (PECL OCI8 1.4), utilisez la constante `OCI_DEFAULT` qui est un équivalent de la constante `OCI_NO_AUTO_COMMIT`.

  L'utilisation du mode `OCI_NO_AUTO_COMMIT` démarre ou continue une transaction. Les transactions sont automatiquement annulées lorsque la connexion est fermée ou lorsque le script se termine. Appelez explicitement la fonction oci_commit() pour valider la transaction ou la fonction oci_rollback() pour l'annuler.

  Lors de l'insertion ou de la mise à jour de données, l'utilisation de transactions est fortement recommandée pour garantir la consistance relationnelle des données, mais aussi en raison d'un gain non négligeable de performance.

  Si le mode `OCI_NO_AUTO_COMMIT` est utilisé pour toutes opérations y compris les requêtes, et que les fonctions oci_commit() et oci_rollback() ne sont jamais appelées, OCI8 effectuera une annulation à la fin du script même si les données ont changées. Pour éviter ce comportement, la plupart des scripts n'utilise pas le mode `OCI_NO_AUTO_COMMIT` pour les requêtes ou les procédures stockées PL/SQL. Assurez-vous de la consistance transactionnelle appropriée de vos applications lors de l'utilisation de la fonction oci_execute() avec différents modes dans le même script.

### Valeurs de retour

Cette fonction retourne `TRUE` en cas de succès ou `FALSE` si une erreur survient.

### Exemples

Exemple #1 Exemple avec oci_execute() pour des requêtes

`<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, 'SELECT * FROM employees');
oci_execute($stid);
echo "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "") . "</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
?>`

Exemple #2 Exemple avec oci_execute() sans spécifier de mode

`<?php
// Avant exécution, créez la table :
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');
oci_execute($stid); // La ligne est validée et est immédiatement visible par les autres utilisateurs
?>`

Exemple #3 Exemple avec oci_execute() et `OCI_NO_AUTO_COMMIT`

`<?php
// Avant exécution, créez la table :
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (:bv)');
oci_bind_by_name($stid, ':bv', $i, 10);
for ($i = 1; $i <= 5; ++$i) {
oci_execute($stid, OCI_NO_AUTO_COMMIT); // utilisez OCI_DEFAULT pour PHP <= 5.3.1
}
oci_commit($conn); // valide toutes les nouvelles valeurs : 1, 2, 3, 4, 5
?>`

Exemple #4 Exemple avec oci_execute() et différents modes dans le même script

`<?php
// Avant exécution, créez la table :
// CREATE TABLE MYTABLE (col1 NUMBER);
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');
oci_execute($stid, OCI_NO_AUTO_COMMIT); // data not committed
$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (456)');
oci_execute($stid); // valide à la fois les valeurs 123 et 456
?>`

Exemple #5 Exemple avec oci_execute() et `OCI_DESCRIBE_ONLY`

`<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, 'SELECT * FROM locations');
oci_execute($s, OCI_DESCRIBE_ONLY);
for ($i = 1; $i <= oci_num_fields($stid); ++$i) {
echo oci_field_name($stid, $i) . "<br>\n";
}
?>`

### Notes

> Note:

> Les transactions sont automatiquement annulées lorsque les connexions sont fermées, ou lorsque le script se termine, suivant ce qui arrive en premier. Appelez explicitement la fonction oci_commit() pour valider une transaction.

> Tout appel à la fonction oci_execute() qui utilise le mode `OCI_COMMIT_ON_SUCCESS` explicitement ou par défaut validera toutes les transactions en cours.

> Toutes les requêtes Oracle DDL comme CREATE ou DROP valideront toutes les transactions en cours.

> Note:

> À cause du fait que la fonction oci_execute() envoie généralement la requête à la base de données, la fonction oci_execute() peut identifier les erreurs de syntaxe de la requête que la fonction oci_parse() aurait pû ne pas détecter.

> Note:

> Dans les versions de PHP antérieures à la version 5.0.0, vous devez utiliser la fonction ociexecute(). oci.name.compat.note;

### Voir aussi

- oci_parse() - Prépare une requête SQL avec Oracle

oci_error
oci_fetch_all
Fonctions OCI8
PHP Manual