ocibindbyname

(PHP 3>= 3.0.4, PHP 4 , PHP 5)

ocibindbyname --  Lie une variable PHP à une variable SQL d'Oracle

Description

bool ocibindbyname ( resource stmt, string ph_name, mixed &variable [, int maxlength [, int type]] )

ocibindbyname() relie la variable PHP variable à l'emplacement Oracle ph_name pour la commande préparée stmt. Son utilisation (comme entrée ou comme sortie) sera définie à l'exécution, et l'espace nécessaire sera alloué. Le paramètre de longueur length fixe la taille maximum pour la liaison. Si vous affectez une longueur de -1, ocibindbyname() utilisera la longueur de variable comme maxlength.

Si vous devez lier des types abstraits de données (LOB/ROWID/BFILE), vous devrez l'allouer dans un premier temps, avec ocinewdescriptor(). La longueur length ne sert pas pour ces types et devrait être fixée à -1. La variable type indique au serveur Oracle, quel type de pointeur va être utilisé. Les valeurs possibles sont : OCI_B_FILE (Fichiers binaires), OCI_B_CFILE (Fichiers texte), OCI_B_CLOB (LOB de texte), OCI_B_BLOB (LOB binaire) et OCI_B_ROWID (ROWID).

Exemple 1. Exemple avec ocibindbyname()

<?php
/* Exemple ociBindByPos par thies@thieso.net (980221)
  Insère 3 lignes dans emp, et utilise ROWID pour mettre à jour
  les lignes, juste après l'insertion.
*/

$conn = OCILogon("scott","tiger");

$stmt = OCIParse($conn,"insert into emp (empno, ename) ".
                       
"values (:empno,:ename) ".
                       
"returning ROWID into :rid");

$data = array(1111 => "Larry", 2222 => "Bill", 3333 => "Jim");

$rowid = OCINewDescriptor($conn,OCI_D_ROWID);

OCIBindByName($stmt,":empno",&$empno,32);
OCIBindByName($stmt,":ename",&$ename,32);
OCIBindByName($stmt,":rid",&$rowid,-1,OCI_B_ROWID);

$update = OCIParse($conn,"update emp set sal = :sal where ROWID = :rid");
OCIBindByName($update,":rid",&$rowid,-1,OCI_B_ROWID);
OCIBindByName($update,":sal",&$sal,32);

$sal = 10000;

while (list(
$empno,$ename) = each($data)) {
    
OCIExecute($stmt);
    
OCIExecute($update);
}

$rowid->free();

OCIFreeStatement($update);
OCIFreeStatement($stmt);

$stmt = OCIParse($conn,"select * from emp where empno in (1111,2222,3333)");
OCIExecute($stmt);
while (
OCIFetchInto($stmt,&$arr,OCI_ASSOC)) {
    
var_dump($arr);
}
OCIFreeStatement($stmt);

/* Effacement des lignes inutiles dans la table emp */
$stmt = OCIParse($conn,"delete from emp where empno in (1111,2222,3333)");
OCIExecute($stmt);
OCIFreeStatement($stmt);

OCILogoff($conn);
?>

Note : Dans les versions de PHP antérieures à la version 5.0.0, vous devez utiliser la fonction ocibindbyname(). Cet ancien nom est toujours utilisable : un alias a été fait vers la fonction oci_bind_by_name(), pour assurer la compatibilité ascendante. Toutefois, il est recommandé de ne plus l'utiliser.

Avertissement

C'est une mauvaise idée que d'utiliser l'option magic_quotes_runtime et la fonction ocibindbyname() simultanément, car aucun ajout de guillemets n'est nécessaire sur les variables citées, et tout guillemet magique sera inscrit dans votre base de données car ocibindbyname() n'est pas capable de faire la différence entre les guillemets littéraux et ceux qui ont été ajoutés dynamiquement.