PHP Handbuch
Zurück |  | Weiter

# oci_bind_by_name

(PHP 5)

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

## Beschreibung

bool oci_bind_by_name ( resource stmt, string ph_name, mixed &variable [, int maxlength [, int type]] )

oci_bind_by_name() bindet die PHP Variable `variable` an den Oracle Platzhalter `ph_name`. Ob dieser zur Ein- oder Ausgabe genutzt wird, wird zur Laufzeit ermittelt, genauso wie der benötigte Speicherplatz. `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 oci_new_descriptor() verwendet werden. `length` gilt nicht für abstrakte Datentypen und sollte dann 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). values are:

- `SQLT_FILE` - für BFILEs (Binärdatei);

- `SQLT_CFILE` - für CFILEs (Textdatei);

- `SQLT_CLOB` - für CLOBs (Text-LOB);

- `SQLT_BLOB` - für BLOBs (Binär-LOB);

- `SQLT_RDD` - für ROWIDs;

- `SQLT_NTY` - für benamte Datentypen;

- `SQLT_INT` - für INTEGERs;

- `SQLT_CHR` - für VARCHARs;

- `SQLT_BIN` - für RAW-Spalten;

- `SQLT_LNG` - für LONG-Spalten;

- `SQLT_LBI` - für LONG-RAW-Spalten;

- `SQLT_RSET` - für Zeiger, die zuvor mit oci_new_cursor() generiert wurden.

Beispiel 1. oci_bind_by_name() Beispiel
`<?php /* oci_bind_by_name Beispiel thies at thieso dot net (980221) fügt 3 Datensätze in emp ein und benutzt ROWID, um die Datensätze direkt nach dem Einfügen zu ändern. */ $conn = oci_connect("scott", "tiger"); $stmt = oci_parse($conn, " INSERT INTO emp (empno, ename) VALUES (:empno,:ename) RETURNING ROWID INTO :rid "); $data = array( 1111 => "Larry", 2222 => "Bill", 3333 => "Jim" ); $rowid = oci_new_descriptor($conn, OCI_D_ROWID); oci_bind_by_name($stmt, ":empno", $empno, 32); oci_bind_by_name($stmt, ":ename", $ename, 32); oci_bind_by_name($stmt, ":rid", $rowid, -1, OCI_B_ROWID); $update = oci_parse($conn, " UPDATE emp SET sal = :sal WHERE ROWID = :rid "); oci_bind_by_name($update, ":rid", $rowid, -1, OCI_B_ROWID); oci_bind_by_name($update, ":sal", $sal, 32); $sal = 10000; foreach ($data as $empno => $ename) { oci_execute($stmt); oci_execute($update); } $rowid->free(); oci_free_statement($update); oci_free_statement($stmt); $stmt = oci_parse($conn, " SELECT * FROM emp WHERE empno IN (1111,2222,3333) "); oci_execute($stmt); while ($row = oci_fetch_assoc($stmt)) { var_dump($row); } oci_free_statement($stmt); /* löscht unseren "Müll" aus der Tabelle emp.... */ $stmt = oci_parse($conn, " DELETE FROM emp WHERE empno IN (1111,2222,3333) "); oci_execute($stmt); oci_free_statement($stmt); oci_close($conn); ?>`

Bedenke, das diese Funktion die nachfolgenden Leerzeichen abscheidet, wie das folgende Beispiel zeigt:

Beispiel 2. oci_bind_by_name() Beispiel
`<?php $connection = oci_connect('apelsin','kanistra'); $query = "INSERT INTO test_table VALUES(:id, :text)"; $statement = oci_parse($query); oci_bind_by_name($statement, ":id", 1); oci_bind_by_name($statement, ":text", "Leerzeichen folgen "); oci_execute($statement); /* Dieser Code wird den String 'Leerzeichen folgen' ohne die nachfolgenden Leerzeichen in die DB einfügen. */ ?>`

Beispiel 3. oci_bind_by_name() Beispiel
`<?php $connection = oci_connect('apelsin','kanistra'); $query = "INSERT INTO test_table VALUES(:id, 'Leerzeichen folgen ')"; $statement = oci_parse($query); oci_bind_by_name($statement, ":id", 1); oci_execute($statement); /* Und dieser Code wird 'Leerzeichen folgen ' hinzufügen und dabei die Leerzeichen erhalten. */ ?>`

Warnung
Benutze magic_quotes_gpc oder addslashes() und oci_bind_by_name() nicht gleichzeitig, da kein quotieren nötig ist und jede magisch hinzugefügte Quotieren in die Datenbank geschrieben wird. oci_bind_by_name() kann die magisch hinzugefügte nicht von den absichtlich hinzugefügten Quotierung unterscheiden.

Gibt bei Erfolg `TRUE` zurück, im Fehlerfall `FALSE`.

> Anmerkung: In der PHP-Versionen vor 5.0.0 muss man ocibindbyname() benutzen. Den Namen kann man immer noch nutzen. Er wurde als Alias für oci_bind_by_name() für die Abwärtskompatibilität erhalten. Dieses ist allerdings veraltet und wird nicht empfohlen.

Zurück | Zum Anfang | Weiter
oci_bind_array_by_name | Nach oben | oci_cancel