PHP / MySQL: как проверить правильно экранированные данные? - PullRequest
2 голосов
/ 18 марта 2012

Ну, на моих страницах php я убегаю таким образом:

$title = "Jack's Long 'Shoes'";
$title = mysql_real_escape_string($title);
$go = mysql_query("INSERT INTO titles (title) VALUES '$title'");

Затем, когда я просматриваю эти данные с помощью phpmyadmin, данные отображаются так, как они были до экранирования, т.е. Jack's Long 'Shoes'

У меня сложилось впечатление, что это будет выглядеть так: Jack\s Long \Shoes\

Предполагается, что косые черты должны быть напечатаны внутри поля базы данных mysql?

Ответы [ 2 ]

4 голосов
/ 18 марта 2012

Нет.Побеги исчезают, как только они попадают в таблицы данных.В этом весь смысл экранирования данных - это все равно, что засунуть письмо в конверт.Письмо остается в конверте (сбежал) во время своего путешествия по почтовой системе.Как только он добирается до места назначения (носитель базы данных), его вынимают из конверта и сохраняют в его первоначальном виде.

Если экранирование (конверт) было сохранено вместе с письмом, вам нужно будет УДАЛИТЬ(открывайте конверт) каждый раз, когда вы извлекаете букву из базы данных.

Для баз данных экранирование служит для «скрытия» метасимволов SQL от анализатора запросов.Как только данные проходят через анализатор и записываются в БД, экранирование больше не требуется.Собственные внутренние обработчики базы данных знают, что такое данные и что такое команды sql, поэтому искусственные деления, созданные escape-кодами, больше не нужны на этом этапе.

2 голосов
/ 18 марта 2012

Определенные символы должны существовать, чтобы оператор мог быть понят.

Например, в PHP, когда у вас есть, $ var = "На днях кто-то сказал \" Здравствуйте! \ "";вы не ожидаете, что \ будет существовать в выходной строке.Экранирование в SQL - это та же концепция.Экранирующие символы предназначены для обозначения специальных символов как буквальных, а не для их фактического отображения.

...