Avatar billede moddi100 Seniormester
28. juli 2008 - 17:44 Der er 5 kommentarer og
1 løsning

Korrekt brug af mysqli

Hej

Jeg har tænkt mig at lave en funktion, der udføre en mysqli-query.

Funktionen skal automatisk escape specialtegn (f.eks. ' og "), den skal forhindre SQL-injektioner, osv...

Jeg har bl.a. hørt om funktionen mysqli_prepare(), men jeg kender ikke rigtig til brugen/sammensætningen af de forskellige funktioner.

Her er hvad jeg har forestillet mig noget af:

function query($sql)
{
  $vars = array();

  // Escape alle variabler
  for($i = 1; $i < func_num_args(); $i++)
  {
    $vars[] = tryl(func_get_arg($i);
  }

  for($i = 1; $i < func_num_args(); $i++) // Erstat variablerne i sql'en
  {
    $sql = preg_replace("/'?%s'?/", $vars[$i - 1], $sql, 1);
  }

  $result = mysqli_query($sql);

  return $result;
}

PS: Jeg ved godt at der ikke findes én korrekt metode, men sikkert mange :D
Avatar billede moddi100 Seniormester
28. juli 2008 - 17:46 #1
Funktionen må egentlig også gerne tjekke om der er flere forespørgsler, eller blot en.

Hvis der findes en funktion til dette ville det klart være at foretrække, ellers vil jeg bare klare det med et regex.
Avatar billede olebole Juniormester
28. juli 2008 - 18:03 #2
Avatar billede moddi100 Seniormester
28. juli 2008 - 18:15 #3
Så hvis jeg laver noget i stil med dette:

function query($sql)
{
$link = mysqli_connect();

if ($stmt = mysqli_prepare($link, $sql)) {

    for($i = 1; $i < func_num_args(); $i++) // Er der ikke en smartere måde?
    {
        mysqli_stmt_bind_param($stmt, "s", func_get_arg($i));
    }

    mysqli_stmt_execute($stmt);

}

mysqli_close($link);

return $res;
}
Avatar billede olebole Juniormester
28. juli 2008 - 18:54 #4
Jeg forstår slet ikke, hvad det er, du vil  =)
Avatar billede moddi100 Seniormester
28. juli 2008 - 19:48 #5
Så må jeg jo prøve at forklare det lidt bedre :D

Jeg ønsker at gøre 'hverdagen lettere' når jeg nu programmere.

Jeg har en side hvor jeg vil udføre en databasequery, jeg vil så 'samle' den i en funktion, hvor der også tjekkes for om parametrene f.eks. indeholder skjulte handlinger (SQL-injektioner), hvis den gør logges ip'en måske...

Grunden til at jeg vil lave funktionen er altså for at spare tid/kode.

Jeg lavede en funktion til mysql, og så tænkte jeg at den kunne vel altid 'konventeres' til mysqli. Se evt: http://www.eksperten.dk/spm/837117

Så i en fil kunne jeg måske bare skrive:

$query_resultat = query("SELECT bla FROM blalba WHERE bla='?'", $værdi);

while(mysqli_fetch_assoc($query_resultat))
...

I stedet for at skulle skrive koden til at etablere mysqliforbindelsen, tjekke om query'en indeholder diverse ulovlige ting osv.

Håber du forstår hvad jeg mener nu :D
Avatar billede moddi100 Seniormester
11. august 2008 - 19:21 #6
Tror bare jeg dropper det. Men tak for din hjælp til at få mig til at indse at det nok ikke kan laves på en simpel og ligetil måde ;D
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