Perl-Problem: Hochkomma in eine MySQL Db reinkriegen

Bash, Shell, PHP, Python, Perl, CGI
sbrinkmann
Posts: 34
Joined: 2002-11-21 23:23
Location: Solingen

Perl-Problem: Hochkomma in eine MySQL Db reinkriegen

Post by sbrinkmann »

Hallo!

Ich möchte Daten aus einer Textdatei in eine MySQL DB hochladen. Nun hängt sich das Ding aber auf, wenn in einem Feld ein Hochkoma ' drinsteht, da MySQL dies dann als Feldtrennung versteht. Der SQL-Befehl sieht so aus:

my $query = $db->prepare("INSERT into DB SET ID = '$datenfeld[0]', Firma = '$datenfeld[1]'");

Nun habe ich versucht, in dem String die Hochkommas durch den entsprechenden HTML-Code zu ersetzen, was dann auch funktioniert:

$_ =~ s/'/′/g;

Doch SQL scheint dieses Zeichen dann trotzdem zu erkennen und beendet an dieser Stelle das Einlesen der Textzeile. Wie kann ich MySQL klarmachen, dass er solche Zeichen bitte als HTML-Code einlesen soll und nicht da aufhören soll? Wenn ich die Variable $datenfeld[X] ohne Hochkommas benutze, geht es nicht und mit Anführungszeichen landen die Variablennamen in der DB, was natürlich auch nicht gewünscht ist.

Wer hat eine Idee? In PHP kann man ja HTML-Code als solchen markieren und dann geht er auch rein, aber ich will das mit Perl lösen.

Merci!
heimdall
Posts: 13
Joined: 2002-08-13 14:59

Re: Perl-Problem: Hochkomma in eine MySQL Db reinkriegen

Post by heimdall »

Die perl-Funktion qq ist was Du suchst:

Code: Select all

my $query = $db->prepare(qq{INSERT into DB SET ID = '$datenfeld[0]', Firma = '$datenfeld[1]'}); 
sbrinkmann
Posts: 34
Joined: 2002-11-21 23:23
Location: Solingen

Re: Perl-Problem: Hochkomma in eine MySQL Db reinkriegen

Post by sbrinkmann »

heimdall wrote:Die perl-Funktion qq ist was Du suchst:

Code: Select all

my $query = $db->prepare(qq{INSERT into DB SET ID = '$datenfeld[0]', Firma = '$datenfeld[1]'}); 
Scheint aber auch nichts zu bringen. Mein Problem sind ja nicht die Anführungszeichen, sondern die Hochkommas vor und nach den Variablennamen. Da in den Variablen gelegentlich (und leider nicht änderbar) Hochkommas auftreten, werden die dann als Ende der Variable interpretiert und diese dann nicht mehr eingelesen.
heimdall
Posts: 13
Joined: 2002-08-13 14:59

Re: Perl-Problem: Hochkomma in eine MySQL Db reinkriegen

Post by heimdall »

Ach so,

in dem Fall nimm die Funktion quote() aus der Packung DBI:

quote($string)
The quote method is used to "escape" any special characters contained in the string and to add the required outer quotation marks. Example:
$sql = $dbh->quote($string)
gamecrash
Posts: 339
Joined: 2002-05-27 10:52

Re: Perl-Problem: Hochkomma in eine MySQL Db reinkriegen

Post by gamecrash »

Ich kann kein Perl, aber im Zweifelsfalle solltest Du die ' einfach mit ' escapen können - sollte allerdings das gleiche sein mit dem quote($string), dann iss wohl des besser...
pedä
Posts: 51
Joined: 2002-08-13 19:30

Re: Perl-Problem: Hochkomma in eine MySQL Db reinkriegen

Post by pedä »

GameCrash wrote:Ich kann kein Perl, aber im Zweifelsfalle solltest Du die ' einfach mit ' escapen können - sollte allerdings das gleiche sein mit dem quote($string), dann iss wohl des besser...
exact:

ich "entschärfe" das hochkomma meist mit $string=~ s/'/\'/gi;

grüssels
pedä