2015-09-14 6 views
2

В настоящее время я пытаюсь выполнить довольно простую задачу. Информация извлекается «post.php» там, где она обрабатывается и должна быть вставлена ​​в базу данных, если идентификатор (автоинкремент) не существует или обновлять данные, если ID существует.ON DUPLICATE KEY не работает

Запуск сценария ничего не записывает в базе данных. Я попытался распечатать запрос на странице и скопировать/вставить SQL в PhpMyAdmin. Он возвращает

# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с длинным описанием, мобильным, типом, сообщением, встраиванием, live, img_url) VALUES ('', 'TE' по строке 1

Мой код:

$query="INSERT INTO xxy (ID, name, address, lat, long, description, mobile, type, reported, embed, live, img_url) VALUES ('$ id', '$ name', '$ address', '$ lat', '$ lon', '$ description', '$ mobile', '$ type', '$ reporting', ' $ embed ',' $ live ',' $ target_file ') ON DUPLICATE KEY UPDATE
name = VALUES (' $ name '), address = VALUES (' $ address '), lat = VALUES (' $ lat '), long = VALUES ('$ lon'), description = VALUES ('$ description'), mobile = VALUES ('$ mobile'), type = VALUES ('$ type'), reported = VALUES ('$ reports'), embed = VALUES ('$ embed'), live = VALUES ('$ live'), img_url = VALUES ('$ img_url') ";

Благодарим за помощь!

UPDATE:

Я также попытался backticking зарезервированных слов. Мой текущий код SQL все еще возвращает ошибку.

1064 - У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' $ name '), address = VALUES (' $ address '), lat = VALUES (' $ lat '), lon = VALUES (' $ долгота «), де» в строке 2

обновленный SQL код, я использую это:

INSERT INTO `xxy` (`ID`, `name`, `address`, `lat`, `lon`, 
`description`, `mobile`, `type`, `reported`, `embed`, `live`, 
`img_url`) VALUES('$id', '$name', '$address', '$lat', '$lon', 
'$description', '$mobile', '$type', '$reported', '$embed', '$live', 
'$target_file') ON DUPLICATE KEY UPDATE  `name`=VALUES('$name'), 
`address`=VALUES('$address'), `lat`=VALUES('$lat'), 
`lon`=VALUES('$lon'), `description`=VALUES('$description'), 
`mobile`=VALUES('$mobile'), `type`=VALUES('$type'), 
`reported`=VALUES('$reported'), `embed`=VALUES('$embed'), 
`live`=VALUES('$live'), `img_url`=VALUES('$img_url') 
+0

вы, вероятно, используя символ, который MySQL не согласен, будучи апострофом. I.e .: «Кофейня Джона», я прав? Если это так, MySQL интерпретирует это как «Кофейня Джона», вызывая синтаксическую ошибку. Вам нужно будет избежать данных. –

+0

Я также попытался выполнить вышеуказанный код непосредственно в PMA. Все еще дает ту же ошибку –

+0

'ON DUPLICATE KEY UPDATE name = '$ name', address = '$ address' ...' Не нужно добавлять 'VALUES' – ojovirtual

ответ

3

Удалить все VALUES ключевое слово в ON DUPLICATE KEY UPDATE разделе

+0

Почему? https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html из руководства 'INSERT INTO table (a, b, c) ЗНАЧЕНИЯ (1,2,3), (4,5,6) ОБНОВЛЕНИЕ КЛЮЧЕЙ DUPLICATE c = ЗНАЧЕНИЯ (a) + ЦЕННОСТИ (b);' –

+0

@ Fred-ii- Потому что ОП использует это неправильно. Либо он избавляется от каждого экземпляра «VALUES()», но оставляет то, что находится в круглой скобке, или он держит «VALUES()» и изменяет то, что находится внутри ** имени ** поля, а не ** значение ** поля. – Crontab

+0

@Crontab Руководство немного запутывается. Хорошо ... справедливо. Давайте посмотрим, что должен сказать OP :-) –

Смежные вопросы