Zum Inhalt springen

BLOB - Handling bei MySql


Empfohlene Beiträge

Hi!

Hab mal wieder eine Frage:

Ich müsste eine Datei (txt,html,pdf,jpg,gif,doc,mpg usw) über PHP in eine MySql - Datenbank speichern! (NICHT DEN LINK!!!!!!)

Dafür hätte ich eine Spalte als LONGBLOB definiert.

Nach dem Speichern in der Datenbank sollte ein Downloadlink angezeigt werden. bei Klick auf dem Link soll ein PHP-Script ausgeführt werden dass den Wert des BLOB - Feldes holt (also die gespeicherte Datei) und herunterlädt.

Hat jemand von euch sowas schon mal gemacht?? Oder könnte mir jemand mal

das komplette BLOB Handling in Verbindung mit MySQL+PHP erklären???

Danke

Azrael

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sowas hab ich schon gebaut. Infos und vor allem Beispiele findest Du hier: www.hotscripts.com.

Noch ein Tip: ich empfehle Dir die Blobs in einer Tabelle zu speichern die zusätzlich nur eine ID besitzt. Die Verknüpfung zu den anderen Daten wird über eine 1:1-Beziehung hergestellt. Bei mir sind massive Performance-Probleme aufgetreten die durch diese Änderung am Datenbankendesign verschwunden sind.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?

http://www.dclp-faq.de/q/q-db-blob.html

28.3. Fatal error: Maximum execution time exceeded

http://www.dclp-faq.de/q/q-fehler-maximum-time.html

Ich würde die Datei im Dateisystem ablegen und nur den Pfad speichern. So brauchst du nur ein Skript, das die Links erzeugt.

Das liefern von Binärdaten aus Mysql ist bis zu 10 mal langsamer als das direkte lesen von Platte.

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Jaraz

Bin auch davon (jetzt besonders!) überzeugt, dass das Speichern von binären Daten in ner Datenbank einfach Schwachsinn ist!!!

Nur leider dachte mein Lehrer (und Projektleiter) ich solls mit BLOBs machen...

Na ja, ich denke, dass es mir jetzt wirklich nicht schwer fallen sollte ihn zu überzeugen!

Gruß

Azrael

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by A.Z.R.A.E.L.

Ok

Ich habs jetzt mal getestet bei mir!

Teilweise sogar mit großen Erfolg!

Teilweise deswegen, weil bei Dateien >= 1 MB ist Schluss mit dem INSERT!!!!!

Gibts da noch Alternativen???

Gruß

Azrael

Das Problem liegt an der Größe des Querys, diese dürfen nur bis zu 64KB groß sein (kann auch etwas größer oder kleiner sein).

Abhilfe schafft da die Funktion LOAD_FILE() z.B.

INSERT INTO `tabelle` SET filecontent=LOAD_FILE('/tmp/paper.pdf');

Originally posted by A.Z.R.A.E.L.

@Jaraz

Bin auch davon (jetzt besonders!) überzeugt, dass das Speichern von binären Daten in ner Datenbank einfach Schwachsinn ist!!!

Nur leider dachte mein Lehrer (und Projektleiter) ich solls mit BLOBs machen...

Na ja, ich denke, dass es mir jetzt wirklich nicht schwer fallen sollte ihn zu überzeugen!

Gruß

Azrael

Wie immer ist es kein genereller "Schwachsinn" binäre Daten in eine Datenbank abzulegen. Die oben genannte FAQ vom Herrn Köhntop ist schon etwas älter und es befinden sich auch einige Ungenauigkeiten darin. Wenn Du eine Internetseite oder ein Forum erstellt ist es wie gesagt sinnvoll die Dateien in das Dateisystem auszulagern, weil die Perfomance sonst ziemlich in die Knie geht.

Es gibt aber auch einige Gründe die binären Daten in der Datenbank zu behalten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by estahn

Das Problem liegt an der Größe des Querys, diese dürfen nur bis zu 64KB groß sein (kann auch etwas größer oder kleiner sein).

Ich würde eher sagen, es liegt an den Variable/n:

max_allowed_packet

oder bei file upload an:

post_max_size

upload_max_filesize

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Jaraz

Ich würde eher sagen, es liegt an den Variable/n:

max_allowed_packet

oder bei file upload an:

post_max_size

upload_max_filesize

Gruß Jaraz

an max_allowed_packet kann es auch liegen, aber ein query ist trotzem in seiner größe beschränkt ;-)

php hat 2mb per default.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by estahn

aber ein query ist trotzem in seiner größe beschränkt ;-)

Ja, sogar genau 1MB :rolleyes:

1048574 Byte

Also erst query anpassen und wenn es dann immer noch nicht klappt, mal die Variablen überprüfen.

Zu der allgemeinen BLOB Verwendung.

Ich habe auch BLOB Spalten in meinen Datenbanken. Aber alles was bereits als Datei vorliegt, bleibt auch eine Datei.

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi!

Also meine Meinung was Blobs angeht hat sich jetzt geändert! *GG*

Habs auch hinbekommen (mit LOAD_FILE())!!

Bei mir hats an max_allowed_packet und an MAX_FILE_SIZE beim Browser gelegen!

:D :D :D

Eine Frage hätte ich allerdings noch:

bei MySQL 3.23 was ist der Maximalwert für max_allowed_packet???

Gruß

Azrael

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Jaraz

Gute Frage. :D

Kann man auch bei 3.23.x mehr als 16 MB in ein LONGBLOB speichern?

Da bei 4.X max_allowed_packet ja größer sein kann.

Gruß Jaraz

wenn in der doku nix weiter steht dann gehts auch nicht. ausser es ist undokumentiert :-)

ansonsten musst du die datei stückeln und die teile einzeln hochladen.

insert into `tabelle` set filecontent=concat_ws('', filecontent, LOAD_FILE(...));

ich hoffe ist so richtig, hab jetzt nur aus dem kopf was dahingeschmiert. grundkonzept sollte aber klar sein. (teil1 + teil2 + ... + teil n = gesamt)

so long.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by A.Z.R.A.E.L.

@estahn

noch was: Hab zwar kapiert was du mit dem zerstückeln, meinst aber die syntax von dem Insert hab ich nicht so gaaanz kapiert!

Thx

Azrael

insert into `tabelle` set filecontent=concat_ws('', filecontent, LOAD_FILE(...));

filecontent = spaltenname

concat_ws führt 2 strings mittels einem trennzeichen zusammen

das trennzeichen hier ist '', also es gibt keins.

must du mal probieren ob das geht, war nur so eine spontane idee.

enrico

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...