Вопрос

Мне просто интересно, имеет ли это значение, если я mysql_real_escape данные более одного раза?

Так что, если я сбежал данные в одной части моего сайта, а затем снова в другой части кода. Будет ли это проблема? Или изменить разницу?

Это было полезно?

Решение

да. Вы получите дополнительные ненужные обратные косания.

Другие советы

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

Это должно предпочтительно в собственном классе БД, конечно.

Да, это будет проблемой.

Например:
если а. Является ли «Дом Джо», первый звонок будет производить «Дом Джо», а второй будет производить дом Джо », сохраняя обратную косание в базе данных.

Это похоже на проблему, которая возникает, когда веб-сервер имеет включенную магические цитаты, и вы используете MySQL_REAL_ESCAPE_STRING на входе от клиента. Это решается по:

if (! get_magic_quotes_gpc()) {
    $value = mysql_real_escape_string($_GET["value"]);
} else {
    $value = mysql_real_escape_string(stripslashes($_GET["value"])); 
}

(Для последнего примера см. http://www.php.net/get_magic_quotes_gpc. )

Я отредактировал ответ, чтобы отражать исправления в комментариях ниже

Конечно, данные будут сбежать.

Вы не должны использовать mysql_real_escape() Вообще, параметризованные запросы через Mysqli. придерживались достаточно долго.

Да, это будет проблема сверхугольника. Это то же самое для любого выхода, независимо от того, что именно это делает. Например, если вы избежите двойных кавычек в строке после распространенного правила:

bla "foo"

После того, как один сбежав становится

bla \"foo\"

После двух становится

bla \\\"foo\\\"

и так далее. Количество «безрезультатно» должно точно соответствовать количеству «конвейеров». Вы можете увидеть проявления этой проблемы на некоторых сайтах, которые превышают некоторые символы в текстовых полях, так что простая апострофа становится \' на выходе.

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

Поэтому вы никогда не должны сбежать более одного раза.

Однако лучшее решение состоит в том, чтобы использовать параметризованные запросы, с тех пор вам не нужно вообще скрестить.

Да, это имеет значение:

$string = "I'm Chuck!";
mysql_escape_string($string); // I\'m Chuck!
mysql_escape_string(mysql_escape_string($string)); // "I\\\'m Chuck!
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top