Mobsan Skrevet 16. desember 2005 Del Skrevet 16. desember 2005 Hvis jeg bruker is_numeric et sted, slipper jeg da GARANTERT å slippe å bruke mysql_real_escape_string()? Har brukt begge hittil, men tenkte å optimalisere litt, så måtte høre om jeg sikkerhetsjekker dobbelt opp? eks: if( isset($_GET['id']) && is_numeric($_GET['id']) ) { $id = mysql_real_escape_string($_GET['id']); $sql = mysql_query("SELECT * FROM $db_shop_linksdb WHERE $db_shop_linksdb_id = $id;", $db); ..osv... } er da linje: $id = mysql_real_escape_string($_GET['id']); unødvendig? Lenke til kommentar
dabear Skrevet 16. desember 2005 Del Skrevet 16. desember 2005 Ja, den er overflødig. Ikke bruk denne funksjonen. Se heller manualsida, der anbefaller de en quote_smart-funksjon // Quote variable to make safe function quote_smart($value) { // Stripslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote if not integer if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } Lenke til kommentar
Mobsan Skrevet 16. desember 2005 Forfatter Del Skrevet 16. desember 2005 Er ikke helt med på hva du mener, men etter hva jeg har fattet bør man bruke mysql_real_escape_string() og ikke stripslashes(), Testet litt nå for å se hva som er raskest, og det ser ut til at is_numeric() er raskere, så det lønner seg å bruke den der det er mulig Lenke til kommentar
Ernie Skrevet 16. desember 2005 Del Skrevet 16. desember 2005 Ja, den er overflødig. Ikke bruk denne funksjonen. Se heller manualsida, der anbefaller de en quote_smart-funksjon // Quote variable to make safe function quote_smart($value) { // Stripslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote if not integer if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } 5301052[/snapback] Hvorfor blir det overflødig i dette tilfellet? Det er faktisk raskere å sjekke om verdien er et tall og så ev. kjøre spørringen. Det du har der sjekker om det ikke er tall, legger i såfall på ' foran og bak og kjører alltid spørringen. Lenke til kommentar
dabear Skrevet 16. desember 2005 Del Skrevet 16. desember 2005 (endret) Mulig vi misforstår hverandre. mysql_real_escape_string er overflødig fordi du ikke skal escape numeriske verdier. Derfor kan den droppes. Bruker du quote_smart, kan du la være å sjekke verdiene, og bare bruke de i form av quote_smart($verdi) . Dette fordi quote_smart legger til anførselstegn forran verdiene viss det er en string og i tillegg kjører mysql_real_escape_string på den. Ettersom numeriske verdier ikke kan forårsake noe «bad» i sql-spørringa, trenger de altså ikke escapes. edit: når det gjelder hastighet: Dette er uvesentlig. Hastighetsforskjellene er ekstremt få. Endret 16. desember 2005 av dabear Lenke til kommentar
Ernie Skrevet 16. desember 2005 Del Skrevet 16. desember 2005 (endret) Jeg veit da eksakt hva den funksjonen gjør. Mitt poeng er bare at den ikke har noen hensikt i denne sammenhengen. Trådstarter ønsker åpenbart bare numriske verdier og da holder det lenge med is_numeric Edit: Tror jeg skal lese litt mer nøye det første innlegget. Altså, ja det er unødvendig, og den quote_smart-greia har lite for seg hvis man tenker seg litt om. Blir det samme om man bruker den eller legger til ' i spørringen. Eneste er for å sikre seg "mot" magic_quotes Endret 16. desember 2005 av Ernie Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå