sql >> Database >  >> RDS >> Mysql

Voer tekst en speciale tekens in en MySQL

Je hebt het goede idee om de tekst in de database als onbewerkt te houden. Ik weet niet zeker waar al dat gedoe met HTML-entiteiten voor is; dat zou niet nodig moeten zijn voor het invoegen van een database.

[De enige reden die ik kan bedenken waarom je zou kunnen proberen om binnenkomende invoer voor de database te decoderen, zou zijn als je merkt dat je tekenreferenties krijgt zoals Š in de invoer van uw formulierinzending. Als dat gebeurt, komt dat omdat de gebruiker tekens invoert die niet voorkomen in de codering die door de pagina met het formulier wordt gebruikt. Deze vorm van codering is volledig nep omdat je dan geen onderscheid kunt maken tussen de gebruiker die Š typt en letterlijk Š . typen ! U moet dit vermijden door de UTF-8-codering voor al uw pagina's en inhoud te gebruiken, aangezien elk mogelijk teken in deze codering past.]

Tekenreeksen in uw script moeten altijd onbewerkte tekst zijn zonder ontsnapping. Dat betekent dat je er niets mee doet tot het moment dat je ze in een context plaatst die geen platte tekst is. Dus om ze in een SQL-string te zetten:

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

(of gebruik geparametriseerde zoekopdrachten om te voorkomen dat u er handmatig aan moet ontsnappen.) Als u inhoud in HTML plaatst:

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

(u kunt een helperfunctie definiëren met een kortere naam zoals function h($s) { echo htmlspecialchars($s, ENT_QUOTES); } als u minder hoeft te typen in sjablonen.)

En... dat is het zo'n beetje. U hoeft geen tekenreeksen te verwerken die uit de database komen, omdat het al onbewerkte tekenreeksen zijn. U hoeft geen invoertekenreeksen(*) te verwerken, behalve de toepassingsspecifieke veldvalidatie die u wilt doen.

*:goed, behalve als magic_quotes_gpc is ingeschakeld, in dat geval moet u ofwel stripslashes() alles wat binnenkomt van get/post/cookie, of, mijn favoriete optie, faalt gewoon onmiddellijk:

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. Spelersrangschikking per categorie over maanden

  2. ongedefinieerde methode `eq' voor nul:NilClass met rails 3 en ruby ​​enterprise op ubuntu hardy

  3. MongoDB of MySQL of beide in een Rails-app

  4. rechter join is gelijk aan linker join?