Екранирането на низ означава намаляване на двусмислието в кавички (и други знаци), използвани в този низ. Например, когато дефинирате низ, обикновено го заобикаляте в двойни или единични кавички:
"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.