ocibindbyname

ocibindbyname -- Bindet eine PHP-Variable an einen Oracle Platzhalter

Beschreibung

int OCIBindByName ( int stmt, string Platzhaltername, mixed Variable, int Länge [, int Typ])

OCIBindByName( ) bindet die PHP Variable variable an den Oracle Platzhalter ph_name . Es wird genutzt um den benötigten Speicherplatz fuer die Ein / Ausgabe zu Laufzeit festzulegen . length gibt dabei die maximale Grösse des Speicherplatzes an . Wenn length auf -1 gesetzt wird , nimmt OCIBindByName( ) die Grösse des Inhalts von variable als maximale Grösse .

Wenn ein abstrakter Datentyp wie ( LOB / ROWID / BFILE ) gebunden werden soll , muss zuerst OCINewDescriptor( ) verwendet werden . length gilt nicht für abstrakte Datentypen und sollte denn auf -1 gesetzt sein . type zeigt Oracle , welchen Typ wir binden wollen . Mögliche Typen sind : OCI_B_FILE ( Binärdatei) , OCI_B_CFILE (Textdatei) , OCI_B_CLOB (Text-LOB) , OCI_B_BLOB (Binär-LOB ) and OCI_B_ROWID (ROWID ) .

Beispiel 1 .

 
?php

 
/

 
*

 
OCIBindByPos

 
example

 
thies@thieso.net

 
(

 
980221

 
)

 
trägt

 
3

 
Datensätze

 
in

 
emp

 
ein

 
und

 
benutzt

 
ROWID

 
für

 
das

 
UPDATE

 
nach

 
dem

 
  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)

 
;

 
?