PHP Doku:: Öffnet ein Large Object - function.pg-lo-open.html

Verlauf / Chronik / History: (43) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzDatenbankerweiterungenAnbieterspezifische DatenbankerweiterungenPostgreSQLPostgreSQL-Funktionenpg_lo_open

Ein Service von Reinhard Neidl - Webprogrammierung.

PostgreSQL-Funktionen

<<pg_lo_import

pg_lo_read_all>>

pg_lo_open

(PHP 4 >= 4.2.0, PHP 5)

pg_lo_openÖffnet ein Large Object

Beschreibung

resource pg_lo_open ( resource $connection , int $oid , string $mode )

pg_lo_open() öffnet ein Large Object in einer Datenbank und gibt einen Handler (eine Ressource) zurück, über den das Large Object modifiziert werden kann.

Warnung

Bevor Sie die Datenbankverbindung schließen, müssen Sie das Large Object wieder schließen.

Um die Large Object (lo) Schnittstelle benutzen zu können, müssen die Kommandos innerhalb einer Transaktion ausgeführt werden.

Hinweis:

Diese Funktion ersetzt die Funktion pg_loopen().

Parameter-Liste

connection

PostgreSQL Verbindungkennung. Falls connection nicht angegeben wurde, wird die zuletzt mit pg_connect() oder pg_pconnect() geöffnete Verbindung benutzt.

oid

Der OID des Large Objects in der Datenbank.

mode

Dies kann entweder "r" für nur lesen, "w" für nur schreiben oder "rw" für lesen und Schreiben sein.

Rückgabewerte

Eine Large Object Ressource oder FALSE, falls ein Fehler auftrat.

Beispiele

Beispiel #1 pg_lo_open() Beispiel

<?php
   $database 
pg_connect("dbname=jacarta");
   
pg_query($database"begin");
   
$oid pg_lo_create($database);
   echo 
"$oid\n";
   
$handle pg_lo_open($database$oid"w");
   echo 
"$handle\n";
   
pg_lo_write($handle"Daten des Large Objects");
   
pg_lo_close($handle);
   
pg_query($database"commit");
?>

Siehe auch


2 BenutzerBeiträge:
- Beiträge aktualisieren...
metator at netcabo dot pt
29.08.2005 20:15
Just for the record, a user must be a superuser (database owner) in order to invoke pg_lo_open() (though pg_lo_create() may be invoked...). This opens a gigantic security hole in the db. If a user is not a superuser, db will raise an error with message "Can't create Large Object.".
Thus, imho, one should use pg_escape_bytea() instead.
riccardo_ridenti at hotmail dot com
24.10.2002 12:49
//INSERT FILE INTO DB
$fp = fopen($filename,"r");
        $buffer = fread($fp,filesize($filename));
    fclose($fp);
    pg_query ($conn, "begin");
    $oid = pg_lo_create ($conn);
    //echo "$oid\n";
      $rs = pg_exec($conn,"insert into table(object) values($oid);");//object field type must be "oid"
    $handle = pg_lo_open ($conn, $oid, "w");
    //echo "$handle\n";
    pg_lo_write ($handle, $buffer);
    pg_lo_close ($handle);
    pg_query ($conn, "commit"); //OR END
pg_close();

//GET BUFFER(file) FROM DB
$rs = pg_exec($conn,"select object from objects where id = xxxxxx;");
$row = pg_fetch_row($rs,0);
pg_query ($conn, "begin");
    $loid = pg_lo_open($conn,$row[0], "r");
    pg_lo_read_all ($loid);
    pg_lo_close ($loid);
pg_query ($conn, "commit"); //OR END
pg_close();



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)