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.