Avatar billede superjma Nybegynder
01. august 2004 - 23:08 Der er 4 kommentarer og
1 løsning

Escaping pling til mysql

Jeg har et super-weird problem med at escape plings til indsættelse i mysql-databasen.

I config.pl ligger flg. metode...
sub mysql_convert
{
    $felt = $_[0];
    $felt =~ s/\'/\\\'/g;
    $felt =~ s/\r/\n/g;
    $felt =~ s/\x0D\x0A/\n/g; #PC
    $felt =~ s/\x0D/\n/g;    #MAC
    $felt =~ s/\x0A/\n/g;    #UNIX
    return $felt;
}

test.pl - bare en simpel fil for at teste
#!/usr/bin/perl
require "config.pl" or die("Can't require configure.pl");
$test = "det'er der ingen ben i";
$test = mysql_convert($test);
print $test;

HER virker det sørme ... output er "det\'er der ingen ben i"

men i min xml-parse-fil-som-gemmer-i-database virker det ikke i flg. function...

my $sql_string="INSERT INTO tabel1 VALUES";

sub save_data
{
    my $felt1 = @_[0];
    my $felt2 = @_[1];
    my $felt3 = @_[2];
    my $felt4 = @_[3];
    if($firstcall==0)
    {
        $sql_string .= ", ";
    }
    else
    {
        $firstcall=0;
    }
    $felt4 = mysql_convert($felt4);
    $sql_string .= "($felt1, $felt2, $felt3, '$felt4')";
}

printer jeg det ud på skærmen står ' uden \ foran.. hvilket logisk nok medfører en fejl i mysql. Har ligeledes prøvet at sætte flg. linie $felt4 =~ s/\'/\\\'/g; ind lige før $sql_string linie.. (altså redundant escaping) ligeledes uden held.. de bliver ikke escaped. Jeg forstår ikke hvorfor der er forskel?
Avatar billede erikjacobsen Ekspert
01. august 2004 - 23:23 #1
Ja, det virker ulogisk. Er du sikker på det er $felt4 der giver problemet?
Avatar billede superjma Nybegynder
01. august 2004 - 23:32 #2
ja for jeg undlod at smide det i database og istedet printede jeg $sql_string.. og redirectede outputtet til en fil.. så jeg kunne nå at læse det uden at det fløj forbi. Der stod alle ' unescaped (uden \).
Avatar billede superjma Nybegynder
01. august 2004 - 23:37 #3
hmm.. sorry..
kørte mysql_convert på et tal der stod før... Ikke på teksten.. overførte den forkerte parameter når jeg kalde metoden.. således at teksten ikke blev kørt gennem mysq_convert.. så der virker alligevel:-D
Avatar billede superjma Nybegynder
01. august 2004 - 23:37 #4
det var jo sådan set svaret
Avatar billede erikjacobsen Ekspert
01. august 2004 - 23:40 #5
Ja, eneste logiske forklaring ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester