Доброго времени суток. Помогите найти ошибку. Маюсь сутки. Перепробовал все варианты(кавычки, пробелы и т.д.), перечитал кучу инфы, а ошибку не вижу. Забиваю уже не переменные, а строку запроса явно(пма) - результат 1064(ошибка синтаксиса). MySQL 5.7x64(на 5.6 та же хрень), PHP 5.6x64 PHP: $quere="INSERT INTO `contragents` (`id`, `name`, `town`, `address`, `url`, `rs`, `coments`, `deleted`)". " VALUES (NULL, 'Рога и копыта', 'Новосибирск', 'Ленина 12', 'www.roga.ru', '124168414312438', 'Опять ппц','0')"; $query=$connection->real_escape_string($quere); $result=f_Insert($query,$connection); if(!$result){ echo $connection->error,' ',$connection->errno,$query,' ',$connection->error_list; $connection->close(); exit(); Вот, что прилетает: 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 '\'Рога и копыта\', \'Новосибирск\', \'Ленина 12\', \' at line 1 1064 INSERT INTO `contragents` (`id`, `name`, `town`, `address`, `url`, `rs`, `coments`, `deleted`) VALUES (NULL, \'Рога и копыта\', \'Новосибирск\', \'Ленина 12\', \'www.roga.ru\', \'124168414312438\', \'Опять ппц\',\'0\')
Не стоит экранировать весь запрос. Нужно экранировать конкретные значения. Например Код (PHP): <?php $query = sprintf("INSERT INTO `c` (`id`, `name`) VALUES (null, '%s')", $connection->real_escape_string('Рога и копыта'); f_Insert($query,$connection);
Вы понимаете что когда начинаете экранировать SQL запрос полностью, то в результате получите невалидный SQL. Пример: Код (SQL): INSERT INTO `contragents` Выполняем над этой строкой функцию экранирования real_escape_string В результате получится следующая строка: Код (SQL): INSERT INTO \`contragents\` И уже эту строку вы пытаетесь скормить в Mysql. Естественно что он вас не понимает. Это уже неправильный SQL Повторюсь: экранировать надо то что внутри VALUES
INSERT INTO `contragents` (`id`, `name`, `town`, `address`, `url`, `rs`, `coments`, `deleted`) VALUES (NULL, \'Рога и копыта\', \'Новосибирск\', \'Ленина 12\', \'www.roga.ru\', \'124168414312438\', \'Опять ппц\',\'0\') Так выглядит запрос - выводит пхп. Там обратные кавычки и они не экранируются
Код (Text): \'Новосибирск\', Здесь обратных слешей быть не должно. Обратные слеши нужны внутри кавычек. Например так Код (Text): 'Д\'Артаньян'
ПМА пишет именно так - экранирует кавычки. Пробовал явно прописать слэши в строке, пробовал без слэшей - всё то же
У вас неправильный SQL запрос Код (SQL): INSERT INTO `contragents` (`id`, `name`, `town`, `address`, `url`, `rs`, `coments`, `deleted`) VALUES (NULL, \'Рога и копыта\', \'Новосибирск\', \'Ленина 12\', \'www.roga.ru\', \'124168414312438\', \'Опять ппц\',\'0\') Должно быть Код (SQL): INSERT INTO `contragents` (`id`, `name`, `town`, `address`, `url`, `rs`, `coments`, `deleted`) VALUES (NULL, 'Рога и копыта', 'Новосибирск', 'Ленина 12', 'www.roga.ru', '124168414312438', 'Опять ппц\',\'0')
Спасибо, что на путь истинный направили - получилось, только и последних слэшей не должно было быть. ПМА со своим кодом с толку сбил - там всё заэкранировано
Высока вероятность, что PMA тут не причем. У меня вот в нем нет никаких экранированных кавычек там, где их быть не должно. НО...они могут появиться, если у вас включены magic_quotes в настройках php. Проверьте. Если так, то выключите.