Forum und email

oci_bind_by_name

(PHP 5, PECL oci8:1.1-1.2.4)

oci_bind_by_name — Associe une variable PHP à une variable SQL Oracle

Description

bool oci_bind_by_name ( resource $statement , string $ph_name , mixed &$variable [, int $maxlength [, int $type ]] )

Lie la variable PHP variable à l'emplacement Oracle ph_name , dans 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é.

Liste de paramètres

statement

Une requête OCI.

ph_name

Le marqueur.

variable

La variable PHP.

maxlength

Fixe la taille maximum pour la liaison. Si vous affectez une longueur length de -1, oci_bind_by_name() utilisera la longueur de variable comme maximum maxlength .

type

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. Le paramètre type indique au serveur Oracle, quel type de pointeur va être utilisé. Les valeurs possibles sont :

  • SQLT_FILE - pour les BFILEs;

  • SQLT_CFILE - pour les CFILEs;

  • SQLT_CLOB - pour les CLOBs;

  • SQLT_BLOB - pour les BLOBs;

  • SQLT_RDD - pour les ROWIDs;

  • SQLT_NTY - Pour les types de données nommés;

  • SQLT_INT - pour les entiers;

  • SQLT_CHR - pour les VARCHARs;

  • SQLT_BIN - pour les colonnes RAW;

  • SQLT_LNG - pour les colonnes LONG;

  • SQLT_LBI - pour les colonnes LONG RAW;

  • SQLT_RSET - pour les curseurs, qui ont été créés auparavant avec la fonction oci_new_cursor().

Valeurs de retour

Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.

Exemples

Example#1 Exemple avec oci_bind_by_name()

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

$conn oci_connect("scott""tiger");

$stmt oci_parse($conn"
                          INSERT INTO
                                     emp (empno, ename)
                               VALUES
                                     (:empno,:ename)
                            RETURNING
                                     ROWID
                                 INTO
                                     :rid
                         "
);

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

$rowid oci_new_descriptor($connOCI_D_ROWID);

oci_bind_by_name($stmt":empno"$empno32);
oci_bind_by_name($stmt":ename"$ename32);
oci_bind_by_name($stmt":rid",   $rowid, -1OCI_B_ROWID);

$update oci_parse($conn"
                            UPDATE
                                  emp
                               SET
                                  sal = :sal
                             WHERE
                                  ROWID = :rid
                           "
);
oci_bind_by_name($update":rid"$rowid, -1OCI_B_ROWID);
oci_bind_by_name($update":sal"$sal,   32);

$sal 10000;

foreach (
$data as $empno => $ename) {
    
oci_execute($stmt);
    
oci_execute($update);
}

$rowid->free();

oci_free_statement($update);
oci_free_statement($stmt);

$stmt oci_parse($conn"
                          SELECT
                                *
                            FROM
                                emp
                           WHERE
                                empno
                              IN
                                (1111,2222,3333)
                         "
);
oci_execute($stmt);

while (
$row oci_fetch_assoc($stmt)) {
    
var_dump($row);
}

oci_free_statement($stmt);

/* delete our "junk" from the emp table.... */
$stmt oci_parse($conn"
                          DELETE FROM
                                     emp
                                WHERE
                                     empno
                                   IN
                                     (1111,2222,3333)
                         "
);
oci_execute($stmt);
oci_free_statement($stmt);

oci_close($conn);
?>

N'oubliez pas que cette fonction supprime les caractères d'espace terminaux. Par exemple :

Example#2 Exemple avec oci_bind_by_name()

<?php
$connection 
oci_connect('apelsin','kanistra');
$query "INSERT INTO test_table VALUES(:id, :text)";

$statement oci_parse($query);
oci_bind_by_name($statement":id"1);
oci_bind_by_name($statement":text""trailing spaces follow     ");
oci_execute($statement);
/*
 Ce code va insérer la chaîne 'trailing spaces follow',
 sans les espaces terminaux.
*/
?>

Example#3 Exemple avec oci_bind_by_name()

<?php
$connection 
oci_connect('apelsin','kanistra');
$query "INSERT INTO test_table VALUES(:id, 'trailing spaces follow      ')";

$statement oci_parse($query);
oci_bind_by_name($statement":id"1);
oci_execute($statement);
/*
 Ce code va insérer la chaîne 'trailing spaces follow      ',
 avec les espaces terminaux.
*/
?>

Valeurs de retour

Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.

Notes

Warning

C'est une mauvaise idée que d'utiliser les magic_quotes_gpc et la fonction oci_bind_by_name() 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 oci_bind_by_name() n'est pas capable de faire la différence entre les guillemets et ceux qui ont été ajoutés dynamiquement.

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.