(PHP 5, PECL oci8:1.1-1.2.4)
oci_bind_by_name — Associe une variable PHP à une variable SQL Oracle
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é.
Une requête OCI.
Le marqueur.
La variable PHP.
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 .
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() .
Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.
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.
*/
?>
Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.
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.