Avatar billede googolplex Novice
06. juni 2004 - 20:48 Der er 12 kommentarer og
1 løsning

Escaping strings

Er der nogen der kan give mig en god/grundig forklaring på, hvad der er bedst at bruge (hvis magic_quotes_gpc = 0):

addslashes()/stripslashes()

eller

mysql_escape_string()

eller

mysql_real_escape_string()

Hvis jeg bruger en af de to sidstnævnte, hvad skal jeg så bruge når jeg trækker data ud at databasen igen ?
Avatar billede erikjacobsen Ekspert
06. juni 2004 - 21:19 #1
brug addslashes. Og ikke stripslashes ved udtræk.
Avatar billede swaxi Nybegynder
06. juni 2004 - 21:53 #2
hvis du escaper til indsættelse i mysql database, skal du bruge mysql_real_escape_string(). for ældre versioner af php kan du bruge mysql_escape_string()
hvis du escaper til indsættelse i en tekstfil, skal du bruge addslashes() ... i praksis fungerer de to funktioner stort set ens, hvorfor du godt kan slippe afsted med at bruge addslashes() i alle tilfælde (og du vil se at mange folk gør det) ... men det korrekte er altså at bruge mysql_escape_string()

du skal ikke bruge stripslashes ved udtræk.
Avatar billede googolplex Novice
06. juni 2004 - 22:15 #3
erikjacobsen siger 'addslashes()', swaxi 'mysql_escape_real_string()' - nogle argumenter for det ene eller andet ?

Jeg troede i øvrigt at jeg skulle bruge en funktion både når jeg indsatte i databasen og når jeg lavede udtræk, tak for udredningen :)

Er det i øvrigt muligt at ændre 'magic_quotes_gpc' hvis man ikke har adgang til php_ini (fx. via .htaccess).
Avatar billede coderdk Praktikant
07. juni 2004 - 00:54 #4
i .htaccess:
php_flag magic_quotes_gpc off

Jeg bruger mysql_escape_string, ved ikke hvorfor man skulle bruge andet til at indsætte i databasen. Du skal ikke bruge noget når du hiver data ud, da mysql_escape_string jo bare erstatter ' med \'

addslashes erstatter ' med \', " med \" og \ med \\ den escaper også 0x00 (null byte) med \0
Avatar billede coderdk Praktikant
07. juni 2004 - 00:57 #5
Hvis du i stedet for den traditionelle php mysql, bruger mysql improved - mysqli (http://dk.php.net/mysqli), og bruger mysqli_prepare skal du ikke tænke på sådan noget ;)
Avatar billede googolplex Novice
07. juni 2004 - 15:50 #6
Ok, tak coderdk, lige et par opfølgende spørgsmål :)

Hvordan kan jeg se om jeg har adgang til MySql Improved ?

Er det ikke bedre at bruge mysql_real_escape_string() end mysql_escape_string() ?

Escaper mysql_(real_)escape_string() ikke " eller \ ?
Avatar billede coderdk Praktikant
07. juni 2004 - 17:08 #7
De to funktioner er ens, men "real" versionen tager højde for charset'et.
Du kan se i phpinfo(); om du har adgang til mysql improved.

Jeg har en funktion jeg bruger til et projekt:

function str2db( $string )
{
  return "'" . mysql_escape_string( $string ) . "'";
}

Denne gør at du kan skrive SQL sådan:

$sql = "
  INSERT INTO
      tabel
  SET
      stringfelt = " . str2db( $value ) . "
      ,talfelt = $tal
  ";

Men det er jo smag og behag :)
Avatar billede googolplex Novice
07. juni 2004 - 18:23 #8
Ok, det lyder måske som et dumt spørgsmål, men er det godt at mysql_real_escape_string() tager højde for charset eller er det ligegyldigt ?

Jeg forstår stadig ikke hvorfor langt de fleste eksempler jeg har set bruger addslashes() hvis mysql_(real_)escape_string() er bedre...
Avatar billede coderdk Praktikant
07. juni 2004 - 18:32 #9
Jo, hvis man brugte et eksotisk charset er det måske godt, men så vidt jeg ved har det ikke rigtig noget at have sagt for os i Danmark.
mysql_escape_string, mysql_real_escape_string eller addslashes - Bare vælg en :) Før den, brugte jeg såmænd str_replace("'","''",$string) - samme resultat :)
Avatar billede swaxi Nybegynder
09. juni 2004 - 01:32 #10
mysql_real_escape_string() findes kun på nyere versioner af php. men hvis du har adgang til den, skal du bruge den fremfor mysql_escape_string()

du kan lave en wrapperfunktion a la :

function db_escape($str)
{
    if (function_exists('mysql_real_escape_string'))
        return mysql_real_escape_string($str);
    else return mysql_escape_string($str);
}
Avatar billede googolplex Novice
09. juni 2004 - 06:29 #11
swazi, læg et svar, så deler jeg point ud :)
Avatar billede googolplex Novice
09. juni 2004 - 11:14 #12
Findes der en metode, hvor jeg kan escape en hel 'Query' på gang, i stedet for at escape de enkelte strenge der skal smides i databasen ?

Læg svar swaxi :)
Avatar billede googolplex Novice
10. juni 2004 - 20:55 #13
Swaxi!?
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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