sql >> Databasteknik >  >> RDS >> Mysql

Mata in text och specialtecken och MySQL

Du har rätt idé att behålla texten i databasen som rå. Inte säker på vad alla HTML-entitetsgrejer är till för; du borde inte behöva göra det för en databasinfogning.

[Den enda anledningen till att jag kan komma på varför du kan försöka entitetsavkoda inkommande indata för databasen är om du upptäcker att du får teckenreferenser som Š i din formulärinlämning. Om det händer beror det på att användaren matar in tecken som inte finns i kodningen som används av sidan med formuläret. Denna form av kodning är helt falsk eftersom du då inte kan skilja på användaren som skriver Š och bokstavligen skriva Š ! Du bör undvika detta genom att använda UTF-8-kodningen för alla dina sidor och innehåll, eftersom alla möjliga tecken passar i denna kodning.]

Strängar i ditt skript ska alltid vara råtext utan att behöva undkomma. Det betyder att du inte gör något med dem förrän du matar ut dem i ett sammanhang som inte är vanlig text. Så för att lägga in dem i en SQL-sträng:

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

(eller använd parametriserade frågor för att undvika att manuellt behöva undkomma det.) När du lägger innehåll i HTML:

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

(du kan definiera en hjälpfunktion med ett kortare namn som function h($s) { echo htmlspecialchars($s, ENT_QUOTES); } om du vill skära ner på mängden att skriva måste du göra i mallar.)

Och... det är ganska mycket det. Du behöver inte bearbeta strängar som kommer ut från databasen, eftersom de redan är råsträngar. Du behöver inte bearbeta indatasträngar(*), annat än någon programspecifik fältvalidering du vill göra.

*:ja, förutom om magic_quotes_gpc är aktiverat, i vilket fall behöver du antingen stripslashes() allt som kommer in från get/post/cookie, eller, mitt favoritalternativ, misslyckas omedelbart:

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. Doktrin anpassad datatyp

  2. SQL Server - Bästa sättet att få identiteten för den infogade raden?

  3. Behöver ordna anställdas namn enligt deras stad kolumnvis

  4. Hur man kontrollerar serverstatus i MySQL Workbench med hjälp av GUI