OCIBindByName
(PHP 4, PHP 5, PECL oci8:1.0-1.2.4)
OCIBindByName — PHP változó kötése egy Oracle értékhez
LeÃrás
Az OCIBindByName() a variable paraméterben megadott PHP változót köti a ph_name paraméterben megadott Oracle értékez (placeholder-hez). Akár bemeneti, akár kimeneti értékként kerül felhasználásra, ez futásidőben dől el, és a szükséges tárolási kapacitás lefoglalásra kerül. A length paraméter adja meg a kötés maximális méretét. Ha a length paramétert -1 értékkel adod meg, az OCIBindByName() a variable paraméterben megadott változó aktuális hosszát veszi maximum méretnek.
Ha absztrakt adattÃpust kell kötnöd (például LOB, ROWID vagy BFILE), elÅ‘ször az OCINewDescriptor() függvényt kell használnod. A length paraméternek nincs jelentÅ‘sége absztrakt adattÃpusok használatakor, mindenképpen -1 értékre kell állÃtani ebben az esetben. A type paraméter adja meg az Oracle-nek, hogy milyen leÃrót szeretnél használni. Lehetséges értékek: OCI_B_FILE (Binary-File), OCI_B_CFILE (Character-File), OCI_B_CLOB (Character-LOB), OCI_B_BLOB (Binary-LOB) és OCI_B_ROWID (ROWID).
Example#1 OCIBindByName
<?php
/* OCIBindByName példa - thies@thieso.net (980221)
Három rekord felvétele a "dolgozok" táblába, és a ROWID
használata az adatok frissÃtésére rögtön a felvitel után.
*/
$conn = OCILogon("scott","tiger");
$stmt = OCIParse($conn,"insert into dolgozok (dolgozoid, dnev) ".
"values (:dolgozoid,:dnev) ".
"returning ROWID into :rid");
$adatok = array(1111 => "Larry", 2222 => "Bill", 3333 => "Jim");
$rowid = OCINewDescriptor($conn, OCI_D_ROWID);
OCIBindByName($stmt,":dolgozoid",&$dolgozoid, 32);
OCIBindByName($stmt,":dnev", &$dnev, 32);
OCIBindByName($stmt,":rid", &$rowid, -1, OCI_B_ROWID);
$update = OCIParse($conn,
"update dolgozok set fizetes = :fizetes ".
"where ROWID = :rid");
OCIBindByName($update,":rid", &$rowid, -1, OCI_B_ROWID);
OCIBindByName($update,":fizetes", &$fizetes, 32);
$fizetes = 10000;
while (list($dolgozoid,$dnev) = each($adatok)) {
OCIExecute($stmt);
OCIExecute($update);
}
$rowid->free();
OCIFreeStatement($update);
OCIFreeStatement($stmt);
$stmt = OCIParse($conn,"select * from dolgozok where dolgozoid in (1111,2222,3333)");
OCIExecute($stmt);
while (OCIFetchInto($stmt, &$tomb, OCI_ASSOC)) {
var_dump($tomb);
}
OCIFreeStatement($stmt);
/* Töröljük a "szemetünket" a dolgozok táblából.... */
$stmt = OCIParse($conn,"delete from dolgozok where dolgozoid in (1111,2222,3333)");
OCIExecute($stmt);
OCIFreeStatement($stmt);
OCILogoff($conn);
?>
Nem jó ötlet a "magic quotes" szolgáltatást, és az OciBindByName() függvényt egyszerre használni, mivel semmilyen átalakÃtás nem szükséges a változókon, és bármilyen extra idézÅ‘jel, ami az értékekben megjelenik az adatbázisba kerül. Az OciBindByName() nem tud különbséget tenni a korábban a karaktersorozatban lévÅ‘ és a "magic quotes" átalakÃtás során bekerült idézÅ‘jelek között.