Avatar billede -street- Nybegynder
06. februar 2008 - 23:29 Der er 10 kommentarer og
1 løsning

Skadelig Data

Findes der et Perl-alternativ til PHP-metoderne addslashes() og stripslashes(), eller SKAL man bruge RegEXP for at fjerne enkelte citationstegn ('), dobbelte citationstegn ("), backslash (\) og NUL (NULL byte) ? På forhånd tak!


// Street^
Avatar billede arne_v Ekspert
06. februar 2008 - 23:47 #1
Perl DBI understøtter prepared statement - brug det i stedet for !
Avatar billede -street- Nybegynder
07. februar 2008 - 11:48 #2
arne_v <- Kan du komme med et eksempel ? :)
Avatar billede rosvall Nybegynder
07. februar 2008 - 15:00 #3
Prepared statements er absolut at foretrække, men der findes da for pokker mysql_escape_string...
Avatar billede pidgeot Nybegynder
07. februar 2008 - 15:05 #4
mysql_real_escape_string er nu klart at foretrække fremfor mysql_escape_string, af hensyn til multibyte-tegnsæt - men eneste grund til man bør bruge escaping i det hele taget, er hvis man ikke har adgang til parameters. Det er før set at databasernes escaping-funktioner indeholder fejl (både MySQL og PostgreSQL har haft dette).

I øvrigt bruger spørger Perl, ikke PHP - han vil bare gerne have nogle alternativer til det han kender ;)
Avatar billede arne_v Ekspert
07. februar 2008 - 15:22 #5
Avatar billede -street- Nybegynder
07. februar 2008 - 18:55 #6
rosvall & pidgeot <- Vil ikk bruge MySQL til at håndtere det, men derimod Perl :)

arne_v <- Ville være sweet hvis du kunne komme med et par simple eksempler. På forhånd tak :)


// Street^
Avatar billede pidgeot Nybegynder
07. februar 2008 - 20:41 #7
Min kommentar var udelukkende for at gøre rosvall opmærksom på at han var gal på den. :)
Avatar billede arne_v Ekspert
08. februar 2008 - 00:00 #8
Eksempel:

use DBI;
# connect
my $con = DBI->connect('DBI:mysql:host=localhost:database=Test','','') or die DBI->errstr;
# display all rows
my $stmt = $con->prepare('SELECT * FROM t1') or die $con->errstr;
$stmt->execute;
while(@row = $stmt->fetchrow_array()) {
    my $f1 = $row[0];
    my $f2 = $row[1];
    print "$f1 $f2\n";
}
# insert new row
my $stmt = $con->prepare('INSERT INTO t1 VALUES(?,?)') or die $con->errstr;
$stmt->execute(6,'FFFFFF');
# display all rows again
my $stmt = $con->prepare('SELECT * FROM t1') or die $con->errstr;
$stmt->execute;
while(@row = $stmt->fetchrow_array()) {
    my $f1 = $row[0];
    my $f2 = $row[1];
    print "$f1 $f2\n";
}
# disconnect
$con->disconnect;
Avatar billede arne_v Ekspert
08. februar 2008 - 00:01 #9
De relevante linier er:

my $stmt = $con->prepare('INSERT INTO t1 VALUES(?,?)') or die $con->errstr;
$stmt->execute(6,'FFFFFF');

? i SQL sætningen

og så kalder man execute med parametrene

(og naturligvis vil de parametre som oftest være variable og ikke konstanter som her)
Avatar billede -street- Nybegynder
08. februar 2008 - 13:18 #10
arne_v <- Helt sikkert...anede ikk at Perl DBI understøttede parametre som f.eks. C# .NET. Mange tak for hjælpen ! Kom med et svar, så du kan få din points :)


// Street^
Avatar billede arne_v Ekspert
08. februar 2008 - 15:23 #11
Svar.

De fleste sprog understoetter prepared statements / parameters.
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
Computerworld tilbyder specialiserede kurser i database-management

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