sql >> Databáze >  >> RDS >> Mysql

PHP MySQL, jak správně uložit / escape řetězec

Ujistěte se, že jste nastavili double_encode na false , jinak budou již zakódované řetězce zakódovány znovu, otočením & do & . Poté, když jej přejdete k zobrazení po použití html_entity_decode , bude vypadat, jako by byl stále zakódován.

Nežádoucí výsledek:http://ideone.com/uQxuAM

Pomocí htmlentities($string, ENT_QUOTES, 'UTF-8', false); zajistí, že se tak nestane.

Poté použijte html_entity_decode($string, ENT_QUOTES, 'UTF-8'); pro zobrazení hodnoty.

Ukázka:http://ideone.com/8Jo7YA

MySQL je však plně schopna uložit dekódované hodnoty do databáze.

Nikdy nechcete mít ve své databázi uložené řetězce kódované htmlentities. Co se stane, když chcete vygenerovat CSV nebo PDF, poslat e-mail nebo cokoli, co není HTML?

Kromě toho, že musíte provést dvojnásobné programování kódování dat, zvýšit množství dat v databázi, a pak ještě musíte dekódovat výstup, existuje spousta článků online, které odpovídají, proč byste neměli.

Takže byste měli vždy potřebovat zakódovat hodnoty pro zobrazení výsledného datového výstupu v html.

Místo toho byste měli vstup opustit pomocí mysqli_real_escape_string

$string = '<a href="/path/to/file?a=b&foo=bar#baz">My Link</a>';
$sql = "INSERT INTO links (link)"
     . "VALUES(" . mysqli_real_escape_string($string) . "')";

nebo ještě lépe použijte připravená prohlášení

$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();

Poté naformátujte výstup jako zprávu o úspěchu, aby se zobrazilo, co bylo skutečně přidáno do databáze.

$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";

Nyní již není potřeba používat html_entity_decode aby se html vykreslil v prohlížeči.



  1. MySQLdb s více transakcemi na připojení

  2. jak mohu vrátit více záznamů databáze ze třídy v programování OOP

  3. nelze se připojit k MySQL na localhost

  4. Chybová zpráva syntaxe MySQL Operand by měl obsahovat 1 sloupec(y)