PHP Portal » PHP Handbuch » oci_bind_by_name

Werbung

oci_bind_by_name


(PHP 5, PECL OCI8 >= 1.1.0)

oci_bind_by_nameBindet eine PHP-Variable an einen Oracle Platzhalter

Beschreibung

bool oci_bind_by_name ( resource $statement , string $ph_name , mixed &$variable [, int $maxlength = -1 [, int $type = SQLT_CHR ]] )

Bindet die PHP-Variable variable an den Oracle-Platzhalter ph_name . Ob dieser zur Ein- oder Ausgabe genutzt wird, wird zur Laufzeit ermittelt und der benötigte Speicherplatz reserviert.

Parameter-Liste

statement

Ein OCI-Statement.

ph_name

Ein Platzhalter.

variable

Die PHP-Variable.

maxlength

Setzt die maximale Größe des Binds. Wenn dieser Wert auf -1 gesetzt wird, nimmt die Funktion die aktuelle Größe von variable und setzt diesen Wert als maximale Grösse.

type

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. Als Standardwert wird SQLT_CHR verwendet. Mögliche Typen sind:

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

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.

Beispiele

PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/* 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);

Bedenken Sie, dass diese Funktion die nachfolgenden Leerzeichen abschneidet, wie das folgende Beispiel zeigt:

PHP Code
1
2
3
4
5
6
7
8
9
10
$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. */

PHP Code
1
2
3
4
5
6
7
8
9
$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. */

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.

Anmerkungen

Warnung

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

Hinweis: 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.