Проблема с MySQL при получении результата с кавычками - PullRequest
0 голосов
/ 12 марта 2011

У меня проблема с запросом SQL на странице php.

Я довольно новичок в php, так что оставайтесь со мной.

Я успешно создал запрос, чтобы выбрать все, но я хочу включить WHERE в запрос. Беда в том, что результат включает кавычки, потому что это HTML-код.

Я уверен, что это просто, но кто-нибудь может помочь ... код проблемы ниже:

$result = mysql_query("SELECT * FROM myTable WHERE text = '<span class="myclass">Here is my text</span>'");

Ответы [ 4 ]

3 голосов
/ 12 марта 2011

Короткий ответ

Избегайте кавычек:

$result = mysql_query("SELECT * FROM myTable WHERE text = '<span class=\"myclass\">Here is my text</span>'");

Правильный ответ

Вы почти наверняка создаете этот запрос динамически (т. Е. Строка <span class=\"myclass\">Here is my text</span> находится в переменной, назовем ее $searchTerm).

НИКОГДА, не выполнять SQL-запросы со встроенными переменными, не экранируя содержимое переменной в первую очередь.Это не только предотвратит такие проблемы, но также предотвратит атаки с использованием SQL-инъекций на ваше приложение.

При условии, что переменная $searchTerm, как упомянуто выше, будет правильным способом:

$query = sprintf('SELECT * FROM myTable WHERE text = \'%s\'',
                 mysql_real_escape_string($searchTerm));
$result = mysql_query($query);

Совершенно правильный ответ

Используйте расширение PDO PHP, которое обеспечивает легкий доступ к этой функции (чтение по привязка переменной ), а также на 100% безопасно (что mysql_real_escape_string являетсянет - но тема слишком сложна, чтобы обсуждать ее здесь).

1 голос
/ 12 марта 2011

Вы можете экранировать кавычки, используя \". Лучше: избегайте своих вещей, используя mysql(i)_escape_string. Лучше всего: использовать PDO с подготовленными утверждениями и позволить ему избежать всего для вас.

0 голосов
/ 12 марта 2011

В вашем коде много проблем.

Ваша текущая проблема связана не с SQL, а с синтаксисом PHP.Как вы можете видеть даже из подсветки синтаксиса, двойные кавычки ломают вашу строку.

$sql = "SELECT * FROM myTable WHERE text='<span class="myclass">Here is my text</span>'";

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

$text = "<span class=\"myclass\">Here is my text</span>";

, либо использовать другие кавычки

$text = '<span class=\"myclass\">Here is my text</span>';

Далее ваша проблема связана с SQL.Вы не можете помещать строки в запрос как есть.Вы должны избежать его для запроса и только затем поместить его в запрос.

$text = '<span class=\"myclass\">Here is my text</span>';
$text = mysql_real_escape_string($text);
$sql = "SELECT * FROM myTable WHERE text='$text'";

Наконец, вы выполняете запрос неправильно.Не пиши горизонтально, пиши вертикально.Положите операторы один под другим, а не в один большой шаг.И результат проверки akways, чтобы быть в курсе всех возможных ошибок:

$text = '<span class=\"myclass\">Here is my text</span>';
$text = mysql_real_escape_string($text);
$sql  = "SELECT * FROM myTable WHERE text='$text'";
$res  = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
0 голосов
/ 12 марта 2011

escape " подписать таким образом: \"

...