Manuel PHP

oci_bind_by_name

(PHP 5, PECL oci8 >= 1.1.0)

oci_bind_by_nameAssocie 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é. Par défaut, vaut SQLT_CHR. 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 VARCHAR;

  • 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 #1 Exemple avec oci_bind_by_name()

  1. <?php
  2. /* Exemple ociBindByPos par thies@thieso.net (980221)
  3. Insère 3 lignes dans emp, et utilise ROWID pour mettre à jour
  4. les lignes, juste après l'insertion.
  5. */  
  6.  
  7. $conn = oci_connect("scott", "tiger");  
  8.  
  9. $stmt = oci_parse($conn, "
  10.                    INSERT INTO
  11.                             emp (empno, ename)
  12.                       VALUES
  13.                             (:empno,:ename)
  14.                      RETURNING
  15.                             ROWID
  16.                          INTO
  17.                             :rid
  18.                    ");  
  19.  
  20. $data = array( 
  21.          1111 => "Larry", 
  22.          2222 => "Bill", 
  23.          3333 => "Jim" 
  24.          );  
  25.  
  26. $rowid = oci_new_descriptor($conn, OCI_D_ROWID);  
  27.  
  28. oci_bind_by_name($stmt, ":empno", $empno, 32);  
  29. oci_bind_by_name($stmt, ":ename", $ename, 32);  
  30. oci_bind_by_name($stmt, ":rid", $rowid, -1, OCI_B_ROWID);  
  31.  
  32. $update = oci_parse($conn, "
  33.                      UPDATE
  34.                          emp
  35.                       SET
  36.                          sal = :sal
  37.                       WHERE
  38.                          ROWID = :rid
  39.                    ");  
  40. oci_bind_by_name($update, ":rid", $rowid, -1, OCI_B_ROWID);  
  41. oci_bind_by_name($update, ":sal", $sal, 32);  
  42.  
  43. $sal = 10000;  
  44.  
  45. foreach ($data as $empno => $ename) { 
  46.    oci_execute($stmt); 
  47.    oci_execute($update);  
  48. }  
  49.  
  50. $rowid->free();  
  51.  
  52. oci_free_statement($update);  
  53. oci_free_statement($stmt);  
  54.  
  55. $stmt = oci_parse($conn, "
  56.                    SELECT
  57.                         *
  58.                      FROM
  59.                         emp
  60.                    WHERE
  61.                         empno
  62.                       IN
  63.                         (1111,2222,3333)
  64.                    ");  
  65. oci_execute($stmt);  
  66.  
  67. while ($row = oci_fetch_assoc($stmt)) { 
  68.    var_dump($row);  
  69. }  
  70.  
  71. oci_free_statement($stmt);  
  72.  
  73. /* delete our "junk" from the emp table.... */  
  74. $stmt = oci_parse($conn, "
  75.                    DELETE FROM
  76.                             emp
  77.                         WHERE
  78.                             empno
  79.                          IN
  80.                             (1111,2222,3333)
  81.                    ");  
  82. oci_execute($stmt);  
  83. oci_free_statement($stmt);  
  84.  
  85. oci_close($conn);  
  86. ?> 

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

Exemple #2 Exemple avec oci_bind_by_name()

  1. <?php
  2. $connection = oci_connect('apelsin','kanistra');  
  3. $query = "INSERT INTO test_table VALUES(:id, :text)";  
  4.  
  5. $statement = oci_parse($query);  
  6. oci_bind_by_name($statement, ":id", 1);  
  7. oci_bind_by_name($statement, ":text", "trailing spaces follow    ");  
  8. oci_execute($statement);  
  9. /*
  10. Ce code va insérer la chaîne 'trailing spaces follow',
  11. sans les espaces terminaux.
  12. */  
  13. ?> 

Exemple #3 Exemple avec oci_bind_by_name()

  1. <?php
  2. $connection = oci_connect('apelsin','kanistra');  
  3. $query = "INSERT INTO test_table VALUES(:id, 'trailing spaces follow    ')";  
  4.  
  5. $statement = oci_parse($query);  
  6. oci_bind_by_name($statement, ":id", 1);  
  7. oci_execute($statement);  
  8. /*
  9. Ce code va insérer la chaîne 'trailing spaces follow    ',
  10. avec les espaces terminaux.
  11. */  
  12. ?> 

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.


Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Bretagne - php - Moto - Kit graphique