PHP kézikönyv
Előző |  | Következő

# OCIBindByName

(PHP 3 >= 3.0.4, PHP 4, PHP 5)

OCIBindByName -- PHP változó kötése egy Oracle értékhez

## Leírás

int OCIBindByName ( int stmt, string ph_name, mixed & variable, int length [, int type] )

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).

Példa 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);
    ?>

Figyelem
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.

Előző | Tartalom | Következő
oci_statement_type | Fel | OCICancel