|
|
|
| Вызывает ошибку если идет запись, такого содержания, например, "Shark's"
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's":....
Из мануала: mysql_escape_string() не мнемонизирует % и _. Тогда в чем ошибка? | |
|
|
|
|
|
|
|
для: sim5
(02.03.2007 в 12:41)
| | Откуда приходит строка "Shark's" в скрипт? | |
|
|
|
|
|
|
|
для: cheops
(02.03.2007 в 12:49)
| | Берется из таблицы (при этом magic_quotes_gpc() включен), затем помещается в другую таблицу. Пробовал при извлечении stripslashes() - всеравно ошибка. | |
|
|
|
|
|
|
|
для: sim5
(02.03.2007 в 12:52)
| | Перед помещением в другую таблицу Вы забыли применить mysql_escape_string()
magic quotes тут не при чем - параметр-то не входящий. | |
|
|
|
|
|
|
|
для: sim5
(02.03.2007 в 12:41)
| | Хех... помню сталкивался с такой ошибкой сам )))
<?
$login = str_replace("'", """, $login);
?>
|
Просто MySQL не может обработать одинарные и двойные кавычки и поэтому пишет такую ошибку :( | |
|
|
|
|
|
|
|
для: DEM
(02.03.2007 в 12:52)
| | Тоесть, если в выражении есть комбинация одинарных и двойных кавычек, то mysql_escape_string() не работает? | |
|
|
|
|
|
|
|
для: sim5
(02.03.2007 в 12:54)
| | Ребята, так что делать - переписать все и выбросить mysql_escape_string()? Или проблема не в mysql_escape_string(), а в "способе" ее вызова? | |
|
|
|
|
|
|
|
для: DEM
(02.03.2007 в 12:52)
| | >$login = str_replace("'", """, $login);
>Просто MySQL не может обработать одинарные и двойные кавычки и поэтому пишет такую ошибку :(
MySQL обрабатывет любые символы, которые ему корректно передают.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2007 в 14:31)
| | >Перед помещением в другую таблицу Вы забыли применить mysql_escape_string()
Да нет, я применяю это перед помещением в таблицу. При чем, когда этот товар добавлялся в базу, проблемы не возникало, теперь же при переносе имени с одной таблицы в другую вот такая ошибка.
Значит вместо mysql_escape_string() надо применить addslashes, str_replace... Ну не определять же мне, корректные или не корректные символы для mysql_escape_string() идут. | |
|
|
|
|
|
|
|
для: sim5
(02.03.2007 в 14:41)
| | >Да нет, я применяю это перед помещением в таблицу.
Внимательно читайте текст.
Вы забыли (или не стали выполнять по незнанию) mysql_escape_string при помещении текстовых данных во вторую таблицу.
>При чем, когда этот товар добавлялся в базу, проблемы не возникало,
Тогда за Вас эту операцию сделал механизм магических кавычек.
>теперь же при переносе имени с одной таблицы в другую вот такая ошибка.
Вы выполняете не перенос (запрос INSERT-SELECT) , а получение данных из БД , и добавление в БД заново. Вы заново создаете текст SQL-запроса, заново формируете в этом тексте строковый литерал и обязаны заново экранировать спецсимволы.
>Значит вместо mysql_escape_string() надо применить addslashes, str_replace... Ну не определять же мне, корректные или не корректные символы для mysql_escape_string() идут.
Я бы посоветовал вообще отключить режим magic_quotes, который в большинстве случаев лишь корежит данные, и делать всё руками.
А символы корректны все. Некорректны лишь методы их обработки. Механизм магических кавычек - некорректный метод. | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2007 в 15:01)
| | Да в том то и дело, что при помещении данных в другую таблицу я применяю mysql_escape_string. Ну если она не может вкупе обработать одинарные и двойные кавычки, то значит я в любом случае получил бы ошибку?
У хостера magic_quotes включен, значит надо его самому выключить, и все переписать.
На форуме об обработке данных много вопросов было и практически везде советовался mysql_escape_string. Я ведь не ДОКА как многие здесь, вот и последовал совету.
И вот что мне сейчас сделать (что лучше), чтобы исключить подобные ошибки, и чтобы это было надежно в части безопасности?
Тогда мне не понятно - что при INSERT (так был втавлен товар и ошибки не возникало) mysql_escape_string ведет себя так, а при UPDATE (так этот товар вставляется в другую таблицу) совсем по другому? Или я просто вообще ничего не понимаю. | |
|
|
|
|
|
|
|
для: sim5
(02.03.2007 в 15:34)
| | >Ну если она не может вкупе обработать одинарные и двойные кавычки, то значит я в любом случае получил бы ошибку?
Еще раз. Текстовые данные MySQL могут содержать любые символы в любых сочетаниях. Люди в них двоичные объекты хранят вроде фотографий, и никаких искажений не происходит. Просто их нужно научиться правильно передавать в БД, извлекать и применять.
приведите небольшой фрагмент кода - маленький пример рассмотрим чтоли... дабы прояснить происходящее. | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2007 в 15:41)
| | Ну собственно ничего не обычного нет вот буру имя товара из таблицы:
$q = db_query("SELECT name FROM ".PRODUCTS_TABLE." WHERE productID=".$prz[0].";") or die (db_error());
$row = db_fetch_row($q);
Далее перед помещением его в другую таблицу для $row[0] применяю mysql_escape_string($row[0]), причем перед этим хоть применяй хоть нет stripslashes, всеравно в итоге ошибка.
Затем помещаю в другую таблицу:
db_query("UPDATE ".PRIZES_TABLE." SET priz='$row[0]', ........ | |
|
|
|
|
|
|
|
для: sim5
(02.03.2007 в 15:52)
| | >применяю mysql_escape_string($row[0]),
Каким образом? Как точно выглядит оператор?
$row[0] = mysql_escape_string($row[0]);
| ?
и еще один важный момент. У Вас данные, часом, не в utf-8? | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2007 в 16:09)
| | Вот так и выглядет $row[0] = mysql_escape_string($row[0]);
cp1251_general_ci. | |
|
|
|
|
|
|
|
для: sim5
(02.03.2007 в 16:17)
| | Resume. Как говорится "Пора и чин знать" - спасибо и на этом. Будем что "нибудь думать".
P.S. Наверное беда мануалов - это изложение материала как об аксиоме, и не слова о возможных "исключениях", из-за которых можно набить "шишку"... | |
|
|
|
|
|
|
|
для: sim5
(02.03.2007 в 17:31)
| | Напечатайте запрос непосредственно перед db_query. Чудес на свете не бывает.
$sql = "UPDATE......";
echo htmlspecialchars($sql);
db_query($sql); | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2007 в 17:39)
| | Спасибо - попробуем. | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2007 в 14:31)
| | Ну просто у меня тоже на Денвере писало такую ошибку, я использовал $login = str_replace("'", """, $login); и всё стало выводиться нормально.. (а точнее заносится в таблицу) | |
|
|
|
|
|
|
|
для: DEM
(02.03.2007 в 14:59)
| | >Ну просто у меня тоже на Денвере писало такую ошибку, я использовал $login = str_replace("'", """, $login); и всё стало выводиться нормально.. (а точнее заносится в таблицу)
Да, конечно. Но Вы не исправили ошибку, и даже не нашли её. Вы лишь загнали симптомы болезни внутрь, добавив, если уж переходить на язык медиков, путем применения кривого антибиотика(htmlspecialchars) латентный побочный эффект (превращение текстового контента в html-ный ). В самый неподходящий момент она (болезнь) выползет, и Вы получите массу сюрпризов. | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2007 в 15:04)
| | Хс... теперь буду знать, паиб... | |
|
|
|