sql >> Database teknologi >  >> RDS >> Mysql

Indtast tekst og specialtegn og MySQL

Du har den rigtige idé om at holde teksten i databasen som rå. Ikke sikker på, hvad alle HTML-entitetsting er til; du burde ikke behøve at gøre det for en databaseindsættelse.

[Den eneste grund til, at jeg kan komme i tanke om, hvorfor du måske forsøger at enheds-afkode indgående input til databasen, ville være, hvis du opdager, at du får tegnreferencer som Š i dit input til formularindsendelse. Hvis det sker, er det, fordi brugeren indtaster tegn, der ikke findes i den kodning, der bruges af siden med formularen. Denne form for kodning er fuldstændig falsk, fordi du så ikke kan skelne mellem brugeren, der skriver Š og bogstaveligt talt skrive Š ! Du bør undgå dette ved at bruge UTF-8-kodningen til alle dine sider og indhold, da alle mulige tegn passer i denne kodning.]

Strenge i dit script skal altid være rå tekst uden at undslippe. Det betyder, at du ikke gør noget ved dem, før du udskriver dem i en kontekst, der ikke er almindelig tekst. Så for at sætte dem i en SQL-streng:

$category= trim($_POST['category']);
mysql_query("SELECT * FROM things WHERE category='".mysql_real_escape_string($category)."'");

(eller brug parametriserede forespørgsler for at undgå at skulle undslippe det manuelt.) Når du sætter indhold i HTML:

<input type="text" name="category" value="<?php echo htmlspecialchars($category); ?>" />

(du kan definere en hjælpefunktion med et kortere navn som function h($s) { echo htmlspecialchars($s, ENT_QUOTES); } hvis du vil skære ned på mængden af ​​at skrive, skal du gøre i skabeloner.)

Og... det er stort set det. Du behøver ikke at behandle strenge, der kommer ud af databasen, da de allerede er rå strenge. Du behøver ikke at behandle inputstrenge(*), bortset fra enhver programspecifik feltvalidering, du vil udføre.

*:godt, undtagen hvis magic_quotes_gpc er slået til, i hvilket tilfælde du enten skal stripslashes() alt, der kommer ind fra get/post/cookie, eller min foretrukne mulighed, mislykkes bare med det samme:

if (get_magic_quotes_gpc())
    die(
        'Magic quotes are turned on. They are utterly bogus and no-one should use them. '.
        'Turn them off, you idiot, or I refuse to run. So there!'
    );


  1. Hvordan installeres oracle instantclient og pdo_oci på ubuntu-maskine?

  2. Flet og opdater primærnøgle

  3. Sådan sikrer du din PostgreSQL-database - 10 tips

  4. opsætning af en database til sporing af, hvilke brugere der har klikket på hvilke links?