Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3476[/thread]

Text SQL-Fähig machen



<< >> 8 Einträge, 1 Seite
Gast Gast
 2004-07-05 01:45
#32329 #32329
Hallo Forum!

Ich habe folgendes Problem:
Ich möchte ziemlich große Texte in eine PostgreSQL-Datenbank einfügen. Das Problem ist nun das sich in den Texten und Sonderzeichen befinden.
Ich habe das mit folgendem Code schon einigermaßen gelöst, allerdings funktioniert das anscheinend nicht mit jedem Text:

Code: (dl )
1
2
my $query_handle2 = $dbh2 -> prepare("INSERT INTO data (texte) VALUES (quote_literal(quote_ident('".$outp."')))")
or die "FEHLER" $DBI::errstr\n";


So - Gibt es vielleicht in Perl eine bessere Funktion, oder kann mir jemand sagen welche Zeichen SQL nicht mag?

Gruß:

Tobias
esskar
 2004-07-05 02:29
#32330 #32330
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
mach es dir doch einfach und wandele alles nach Base64 um.
ist zwar alles um das 4fache größer aber so schlimm ist das wohl nicht!
Relais
 2004-07-05 03:04
#32331 #32331
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Guest,04.07.2004, 23:45]Gibt es vielleicht in Perl eine bessere Funktion, oder kann mir jemand sagen welche Zeichen SQL nicht mag?[/quote]
In Perl nicht, für Perl ist SQL ja auch nur ein String.
Aber in DBI: DBI::quote - Siehe CPAN:DBI\n\n

<!--EDIT|Relais|1088982310-->
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
renee
 2004-07-05 09:04
#32332 #32332
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du würdest es besser so machen:
Code: (dl )
1
2
3
my $statement = "INSERT INTO data (texte) VALUES (?)";
my $query_handle2 = $dbh2 -> prepare($statement) or die "FEHLER! $DBI::errstr\n";
$query_handle2->execute($outp);


Dann brauchst Du nicht explizit DBI->quote() zu nehmen, sondern das passiert dann automatisch!\n\n

<!--EDIT|renee|1089004038-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
jan10001
 2004-07-05 09:37
#32333 #32333
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Hm, ich habe es noch nicht getestet, aber warum nicht den Text ins Unicode Format bringen? Sowohl Perl wie MySQL verstehen doch Unicode und die Ausgabe bei den meisten Webseiten ist ja sowieso UTF8.
Tobias Heise
 2004-07-05 13:17
#32334 #32334
User since
2004-07-05
13 Artikel
BenutzerIn
[Homepage] [default_avatar]
An Base64 hab ich auch schon gedacht, aber es ist wohl nicht so eine gute Idee, weil mehr Speicherplatz verbraucht wird und ich denke auch die Geschwindigkeit wird darunter leiden.
@renee
Ich habe das nicht so ganz verstanden. Meinst du das wenn ich die SQL Syntax in einen String packe, das es dann von automatisch geht?

@jan10001
Ich versuch es mal.
renee
 2004-07-05 14:36
#32335 #32335
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
nein, ich habe das Statement nur der Übersichtlichkeit halber in eine extra Variable geschrieben.
Das "Geheimnis liegt in dem ? ... (Schau mal in die Klammer hinter values )
Du musst dann bei execute() angeben, welcher wert für das ? eingesetzt werden soll. Das geht natürlich auch mit mehreren werten:
Code: (dl )
1
2
3
my $statement = "INSERT INTO data (texte, column2) VALUES (?,?)";
my $query_handle2 = $dbh2 -> prepare($statement) or die "FEHLER! $DBI::errstr\n";
$query_handle2->execute($outp,$wert2);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Tobias Heise
 2004-07-06 13:02
#32336 #32336
User since
2004-07-05
13 Artikel
BenutzerIn
[Homepage] [default_avatar]
@renee
Danke, habs dann später doch noch begriffen, funktioniert tatsächlich Perfekt!!
<< >> 8 Einträge, 1 Seite



View all threads created 2004-07-05 01:45.