oci_executeExécute une commande SQL Oracle
&reftitle.description;
booloci_executeresourcestatementintmodeOCI_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.
&reftitle.parameters;
statement
Un identifiant de requête OCI valide.
mode
Un second paramètre optionnel peut prendre une des constantes suivantes :
Modes d'exécutionConstanteDescriptionOCI_COMMIT_ON_SUCCESSValidation 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_ONLYRend 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_COMMITNe 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.
&reftitle.returnvalues;
&return.success;
&reftitle.examples;
Exemple avec oci_execute pour des requêtes
\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo "
\n";
}
echo "\n";
?>
]]>
Exemple avec oci_execute sans spécifier de mode
]]>
Exemple avec oci_execute et OCI_NO_AUTO_COMMIT
]]>
Exemple avec oci_execute et différents modes dans le même script
]]>
Exemple avec oci_execute et
OCI_DESCRIBE_ONLY
\n";
}
?>
]]>
&reftitle.notes;
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.
À 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.
&reftitle.seealso;
oci_parse