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

Co to znamená uniknout řetězci?

Escapování řetězce znamená snížení nejednoznačnosti v uvozovkách (a dalších znacích) použitých v tomto řetězci. Když například definujete řetězec, obvykle jej umístíte do dvojitých nebo jednoduchých uvozovek:

"Hello World."

Ale co když můj řetězec obsahuje dvojité uvozovky?

"Hello "World.""

Teď mám nejasnost - tlumočník neví, kde můj řetězec končí. Pokud si chci ponechat své dvojité uvozovky, mám několik možností. Kolem svého řetězce bych mohl použít jednoduché uvozovky:

'Hello "World."'

Nebo mohu uniknout svým uvozovkám:

"Hello \"World.\""

Jakákoli uvozovka, které předchází lomítko, je escaped a rozumí se, že je součástí hodnoty řetězce.

Pokud jde o dotazy, MySQL má určitá klíčová slova, která sleduje, která nemůžeme použít v našich dotazech, aniž bychom způsobili nějaký zmatek. Předpokládejme, že jsme měli tabulku hodnot, kde byl sloupec pojmenován „Vybrat“, a chtěli jsme to vybrat:

SELECT select FROM myTable

Nyní jsme do našeho dotazu vnesli určitou nejednoznačnost. V rámci našeho dotazu můžeme tuto nejednoznačnost omezit pomocí zpětných znamének:

SELECT `select` FROM myTable

To odstraňuje zmatek, který jsme zavedli špatným úsudkem při výběru názvů polí.

Mnohé z toho lze za vás vyřídit pouhým předáním svých hodnot přes mysql_real_escape_string() . V níže uvedeném příkladu můžete vidět, že touto funkcí předáváme data odeslaná uživateli, abychom zajistili, že to nezpůsobí žádné problémy pro náš dotaz:

// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));

Existují další metody pro escapování řetězců, jako je add_slashes , addcslashes , quotemeta a další, i když zjistíte, že když je cílem spustit bezpečný dotaz, velcí vývojáři preferují mysql_real_escape_string nebo pg_escape_string (v kontextu PostgreSQL.



  1. Definujte kroky pro SQL Server Cursor - SQL Server / TSQL výukový program

  2. nemůže přijímat out parametr z procedury oracle prováděné mybatis

  3. Je v tsql vložka s příkazem Select bezpečná z hlediska souběžnosti?

  4. PostgreSQL přízvuk + vyhledávání bez rozlišení velkých a malých písmen