(3.0.4 - 3.0.18 only, PHP 4 >= 4.0.0)
OCIBindByName -- Bind a PHP variable to an Oracle Placeholder
Description
int OCIBindByName (int stmt, string ph_name, mixed ∓variable, int
length, int [type])
OCIBindByName() binds the PHP variable variable to the Oracle
placeholder ph_name. Whether it will be used for input or output will be determined
run-time, and the necessary storage space will be allocated. The length parameter
sets the maximum length for the bind. If you set length to -1
OCIBindByName() will use the current length of variable to set the maximum
length.
If you need to bind an abstract Datatype (LOB/ROWID/BFILE) you need to allocate it first
using OCINewDescriptor() function. The length is not used for abstract
Datatypes and should be set to -1. The type variable tells oracle, what kind of
descriptor we want to use. Possible values are: OCI_B_FILE (Binary-File), OCI_B_CFILE
(Character-File), OCI_B_CLOB (Character-LOB), OCI_B_BLOB (Binary-LOB) and OCI_B_ROWID (ROWID).
|
Example 1. OCIDefineByName
<?php
/* OCIBindByPos example thies@thieso.net (980221)
inserts 3 records into emp, and uses the ROWID for updating the
records just after the insert.
*/
$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);
/* delete our "junk" from the emp table.... */
$stmt = OCIParse($conn,"delete from emp where empno in (1111,2222,3333)");
OCIExecute($stmt);
OCIFreeStatement($stmt);
OCILogoff($conn);
?>
|
|
| Warning |
|
It is a bad idea to use magic quotes and OciBindByName() simultaneously as no
quoting is needed on quoted variables and any quotes magically applied will be written into your
database as OciBindByName() is not able to distinguish magically added quotings from those
added by intention.
|
|