Всем привет! История такая, был в отпуске - на работе образовалась проблема: Сайт из 1С подгружает товары, у товаров есть соответственно артикулы, менеджеры решили ввести номенклатуру с содержанием слеша.. итого из 1С приходит например артикул "158158\", что соотвтественно пишется в SQL - а php переварить этого не может по понятным причинам. пробовал str_replace("\\", "\\\\", $request) - нулевой результат, пробовал htmlspecialchars - нулевой результат, пробовал realescapestring - тоже нулевой результат. т.е. выполнить запрос - невозможно "INSERT INTO `products` (`id`, `art`) VALUES ('', '1111111\')" "INSERT INTO `products` (`id`, `art`) VALUES ('', '1111111\\')" 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 ''1111111\')' at line 1 Кто то сталкивался?
Из 1С приходит не правильный SQL запрос. Покажи реальные запросы, потому как очень странные примеры и похоже в них экранирование работает в случайном порядке.
Не знаю успел прочитать нет? форум глюкнуло, он каждое мое добавление в новом посте выдал) удалил первое сообщение - исчезли все посты с quote) вобщем работает только $query="INSERT INTO `products` (`id`, `art`) VALUES ('', '1111111\\\')"; т.е. спецсимвол \\ в php это как одинарная \, а \' внутри двойных кавычек это и есть \' в php, а в mysql попадает как \\' - т.е. \\ это для mysql как одинарная \, вот такие пироги. придется жестить вроде str_replace("\\", "\\\\\\", $value['art']);
Да причем тут он? приходит массив, в нем артикул "111111\", формируется запрос, выполняется запрос вопрос тут лишь в том как записать в базу артикул 111111\ и все, больше ни в чем)
Используй подготовленные запросы тогда или экранируй методом, real escape string из MySQLi или quote из PDO.
Значит артикул подставляется в запрос без правильной предварительной обработки. Поэтому и просят этот код. Ответ @denis01 уже дал верный - подготовленные запросы или экранирование.