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

Exemple 1797. Exemple avec oci_bind_by_name()

<?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  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 ( $conn OCI_D_ROWID );

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

$update  oci_parse ( $conn "
                            UPDATE
                                  emp
                               SET
                                  sal = :sal
                             WHERE
                                  ROWID = :rid
                           "
);
oci_bind_by_name ( $update ":rid" $rowid , - 1 OCI_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 :

Exemple 1798. 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.
*/
?>

Exemple 1799. 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

AVERTISSEMENT

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.