Втеча з рядка означає зменшення двозначності в лапках (та інших символах), що використовуються в цьому рядку. Наприклад, коли ви визначаєте рядок, ви зазвичай оточуєте його або подвійними лапками, або одинарними лапками:
"Hello World."
Але що, якби в моєму рядку були подвійні лапки?
"Hello "World.""
Зараз у мене неоднозначність - перекладач не знає, де закінчується мій рядок. Якщо я хочу зберегти свої подвійні лапки, у мене є кілька варіантів. Я міг би використовувати одинарні лапки навколо мого рядка:
'Hello "World."'
Або я можу уникнути своїх цитат:
"Hello \"World.\""
Будь-яка лапка, якій передує коса риса, є екранованою та розуміється як частина значення рядка.
Що стосується запитів, MySQL має певні ключові слова, за якими слідкує, і які ми не можемо використовувати у своїх запитах, не викликаючи певної плутанини. Припустимо, у нас була таблиця значень, де стовпець був названий "Вибрати", і ми хотіли вибрати це:
SELECT select FROM myTable
Зараз ми внесли певну неоднозначність у наш запит. В рамках нашого запиту ми можемо зменшити цю двозначність, використовуючи зворотні позначки:
SELECT `select` FROM myTable
Це усуває плутанину, яку ми ввели, використовуючи поганий судження при виборі назв полів.
Багато з цим можна впоратись для вас, просто передавши свої цінності mysql_real_escape_string()
. У наведеному нижче прикладі ви можете бачити, що ми передаємо дані, передані користувачем, через цю функцію, щоб переконатися, що це не спричинить жодних проблем для нашого запиту:
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
Існують і інші методи для обробки рядків, таких , як add_slashes
, addcslashes
, quotemeta
і багато іншого, хоча ви виявите , що , коли мета полягає в тому, щоб запустити безпечний запит, за великим рахунком розробники вважають за краще mysql_real_escape_string
або pg_escape_string
(в контексті PostgreSQL.