Ответ 1
Сброс строки означает уменьшение двусмысленности в кавычках (и других символах), используемых в этой строке. Например, когда вы определяете строку, вы обычно окружаете ее в двойных кавычках или одинарных кавычках:
"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.