Textdatei in Oracle als BLOB speichern?
Tom22
- php
Hallo *
kann mir bitte jemand erklären, wie ich ein Textdatei mittels php in eine Oracle(Oracle 8) Datenbank einfügen kann. Welchen Datentyp brauch ich? BLOB?
Bitte helfen, ist sehr dringend!
Tom
Muss die Textdatei in Oracle durchsuchbar sein? Sonst würde ich vorschlagen die Textdatei woanders abzulegen und nur den Pfad in Oracle abzulegen
The table will look like this :
ID_TXT Path
90001 /pub/other/pic/frage1.txt
90002 /pub/other/pic/frage2.txt
90003 /pub/other/pic/frage3.txt
90004 /pub/other/pic/frage4.txt
Abfrage:
$ID = 90001;
$conn = OCILogon( .....); // Deine Connection hier
$stmt = OCIParse($conn,"Select path
from image_tbl where ID_TXT = $ID");
OCIExecute($stmt);
if (OCIFetch($stmt))
{
$_path = OCIResult($stmt,1);
print "$_path">; // Text anzeigen
}
else
{
print "Keinen Text gefunden";
}
OCIFreeStatement($stmt);
OCILogOff($conn);
Textdatei hochladen:
$data = "........"; // text binary data
$path = "/pub/other/txt/";
$file=fopen($path."frage5.txt",w);
fwrite($file,$data,strlen($data));
fclose($file);
Gruß
Rüdiger
Hallo Tom,
kann mir bitte jemand erklären, wie ich ein Textdatei mittels php in eine Oracle(Oracle 8) Datenbank einfügen kann. Welchen Datentyp brauch ich? BLOB?
Datentyp BLOB ist in Ordnung, CLOB würde auch gehen:
http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/server.920/a96540/sql_elements2a.htm#46139
(Achtung, Du musst einen OTN-Account besitzen)
Du solltest Dir außerdem die spezielle Syntax für das Speichern von LOB-Objekten bei Oracle anschauen, siehe auch »Example 2« in:
http://de3.php.net/manual/en/function.ocinewdescriptor.php
Christian
Falls Du die Texte doch direkt in Oracle ablegen willst, hier eine Anleitung für Grafikdateien:
<?php
$conn=OCILogon("muenz","andriz");
$lob=OCINewDescriptor($conn, OCI_D_LOB);
$stmt = OCIParse($conn,"insert into images_tb (id, the_blob) values(my_seq.NEXTVAL, EMPTY_BLOB()) returning the_blob into :the_blob");
OCIBindByName($stmt, ':the_blob', &$lob, -1, OCI_B_BLOB);
OCIExecute($stmt, OCI_DEFAULT);
$lob->savefile("/folders/1.gif");
OCICommit($conn);
OCIFreeDescriptor($lob);
OCIFreeStatement($stmt);
OCILogoff($conn);
?>
Zur Anzeige im Browser:
<img src="getimg.php?img_id=100">
Hier die getimg.php:
<?php
<?php
$conn=OCILogon("muenz","andriz");
$stmt = OCIParse($conn,"select the_blob from images_tb where id=$img_id");
OCIExecute($stmt);
OCIFetchInto($stmt, $lob);
$content=$lob->load();
OCIFreeStatement($stmt);
OCILogoff($conn);
header("Content-type: image/gif\n\n");
echo $content;
?>
Falls Du die Texte doch direkt in Oracle ablegen willst, hier eine Anleitung für Grafikdateien:
Ja, will und muß ich :-)
<?php
$conn=OCILogon("muenz","andriz");
$lob=OCINewDescriptor($conn, OCI_D_LOB);
$stmt = OCIParse($conn,"insert into images_tb (id, the_blob) values(my_seq.NEXTVAL, EMPTY_BLOB()) returning the_blob into :the_blob");
OCIBindByName($stmt, ':the_blob', &$lob, -1, OCI_B_BLOB);
OCIExecute($stmt, OCI_DEFAULT);
68 »» $lob->savefile("/folders/1.gif");
69 »» OCICommit($conn);
OCIFreeDescriptor($lob);
71 »» OCIFreeStatement($stmt);
OCILogoff($conn);
?>
Vielen Dank so weit!
Leider geht diese Anleitung bei mir nicht!
Ich bekomm folgende Fehlermeldung:
Warning: OCIStmtExecute: ORA-02289: Diese Sequenz gibt es nicht in d:\programme\apache group\apache\htdocs\test\dokument2.php on line 68
Warning: OCILobWrite: OCI_INVALID_HANDLE in d:\programme\apache group\apache\htdocs\test\dokument2.php on line 69
Fatal error: Call to undefined function: ocifreedescriptor() in d:\programme\apache group\apache\htdocs\test\dokument2.php on line 71
Zeilenangaben siehe Quelltext oben.