PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : jpg in mysql blob Feld per Perl schreiben



otelo
11-01-2005, 12:08
Hi,

kann mir jemand verraten, wie ich mit einem Perlscript ein jpg File in ein Blobfeld schreiben kann?

Auslesen und in einer html Seite anzeigen habe ich hinbekommen aber beim reinschreiben muss es wohl einen Trick geben.

mit folgendem Codeauszug habe ich es probiert:



$image = qq|test.jpg|;
@img = `cat $image`;
$dba = DBI->connect("DBI:mysql:$database:$host:$port", "$dbusername", "$dbpassword") || &x1000;
$dbx = $dba->prepare("INSERT INTO $tables{'tipps'} (t_titel,t_beschreibung,bild1) VALUES('$titel','$kurzbeschreibung','@img')") || &x1000;
$dbx->execute;
$dbx->finish;
$dba->disconnect;

Aber so einfach scheint es nicht zu sein, denn durch das Einlesen des Bildes mit cat sind im @img wahrscheinlich Sonderzeichen enthalten, die beim Insertquery stören, oder?

Kennt sich damit einer aus?

Gruß
Jan

michael.sprick
11-01-2005, 14:25
versuchs mal so:



#!/usr/bin/perl

use warnings;
use strict;

my $filename='test.jpg';
my $imagedata;

open(FH,$filename);
binmode(FH);
read(FH,$imagedata,-s FH);
close(FH);


Ich habs nicht getestet, aber in $imagedata steht jetzt jedenfalls das Bild drin...

otelo
11-01-2005, 14:36
und du meinst, dass ich $imagedata dann einfach beim Insertquery mit angeben kann anstatt meinem @img?

wäre cool wenn, ich werde es heute abend ausprobieren, kanns von meiner Arbeitstelle aus leider nicht testen.

Gruß
Jan

otelo
11-01-2005, 18:18
habe das so probiert, klappt aber auch nicht

ich bekomme folgende Fehlermeldung angezeigt:


DBD::mysql::st execute failed: You have an error in your SQL syntax near '$4üðdô±¶FN`´ÔÄB
ptlÐE}ÇËÈI' at line 1 at images.pm line 16.
PuTTYPuTTYScalar found where operator expected at images.pm line 15, at end of line

ich gehe davon aus, dass in der Variablen Sonderzeichen stehen, die mysql nicht abkann wie zB das ' da nur wie soll ich sowas übergeben wenn er dann mitten in meinem query aufhört?

michael.sprick
11-01-2005, 23:50
habs auch gerade gemerkt...

so gehts aber:



#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $imagedata;

open(FH,"test.jpg");
binmode(FH);
read(FH,$imagedata,-s FH);
close(FH);

my $dbh = DBI->connect("DBI:mysql:database=.....);
my $sth = $dbh->prepare('insert into tabelle (bild) values (?)');
$sth->execute($imagedata) or die $!;


Alternativ zu den Platzhaltern kann man glaubich auch DBI->quote() benutzen...

hth,

~michael

otelo
12-01-2005, 07:31
aha, das werd ich gleich heute abend testen

Gruß
Jan