Forum und email

oci_bind_by_name

(PHP 5, PECL oci8:1.1-1.2.4)

oci_bind_by_name — Bindet eine PHP-Variable an einen Oracle Platzhalter

Beschreibung

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

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össe 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. 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.

Rückgabewerte

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

Beispiele

Example#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($connOCI_D_ROWID);

oci_bind_by_name($stmt":empno"$empno32);
oci_bind_by_name($stmt":ename"$ename32);
oci_bind_by_name($stmt":rid",   $rowid, -1OCI_B_ROWID);

$update oci_parse($conn"
                            UPDATE
                                  emp 
                               SET 
                                  sal = :sal 
                             WHERE 
                                  ROWID = :rid
                             "
);
oci_bind_by_name($update":rid"$rowid, -1OCI_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:

Example#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.
    */
?>

Example#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.
    */
?>

Rückgabewerte

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

Anmerkungen

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.

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.