2013-03-16 2 views
1

По какой-то причине я получаю эту ошибку при использовании моего скрипта редактирования. Я даже попытался заполнить POST значениями и выполнить через PHPmyAdmin. Здесь ошибка я получил:Что не так с моим запросом обновления MySQL?

#1064 - 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 'drop=1, sell=10, cash=10, law=7, boss=1 WHERE ID=11' at line 1 

здесь запрос:

UPDATE toondb SET имя = '$ _ POST [toonname], tlaff = $ _ POST [tlaff], ttype = $ _ POST [ttype], toonup = $ _ POST [toonup], trap = $ _ POST [trap], lure = $ _ POST [lure], sound = $ _ POST [звук], throw = $ _ POST [throw], squirt = $ _ POST [squirt ], drop = $ _ POST [drop], sell = $ _ POST [sell], cash = $ _ POST [cash], law = $ _ POST [law], boss = $ _ POST [boss] WHERE ID = $ _ POST [ID]

здесь с заполненными значениями:

UPDATE toondb SET имя = 'ик', tlaff = 137, ttype = 2, toonup = 1, ловушка = 1, приманка = 1, звук = 1, бросьте = 1, спринцовка = 1, капля = 1 , продать = 10, наличные деньги = 10, закон = 7, босс = 1 WHERE ID = 11

Все столбцы являются INT, кроме имени. Имя - varchar.

+0

'drop' - это зарезервированное слово в MySQL: http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html – CBroe

+1

Привет и приветствуем StackOverflow. Пожалуйста, откатите свое редактирование, чтобы вернуть вопрос в его оригинальную форму. Вы можете прокомментировать один из ответов, если хотите, но не меняйте его так, как только получите ответы. Как сейчас, ответы бессмысленны. Наконец, если вы найдете ответы полезными, попробуйте их проголосовать. И «принять» лучший ответ, если он полностью ответил на ваш вопрос. – BellevueBob

+0

о, извините .. как я откатываю свое редактирование? я не помню, что именно он сказал – llw

ответ

3

Слово drop является зарезервированным ключевым словом. Используйте backticks, чтобы избежать этого.

Как это:

UPDATE toondb SET name='ik', tlaff=137, ttype=2, toonup=1, trap=1, lure=1, 
    sound=1, throw=1, squirt=1, `drop`=1, sell=10, cash=10, law=7, boss=1 WHERE ID=11 
2

Ваша проблема заключается в drop. DROP зарезервированное слово в MySQL, так что вам нужно оформить его в обратные кавычки

`drop` = 1 

Однако, у вас есть другие вопросы, в выписке, а также. Вы подвержены SQL Injection

+0

, который звучит не очень хорошо. Как я могу его исправить, поэтому я менее уязвим для SQL-инъекции? – llw

+0

@alfredo Не пропускайте нефильтрованный ввод пользователя ($ _POST/$ _ GET) в ваши запросы MySQL. В идеале вы должны использовать подготовленные инструкции, используя [PDO] (http://php.net/manual/en/class.pdo.php) или [MySQLi] (http://www.php.net/manual/en /book.mysqli.php) – Jeremy1026

+0

есть руководство о том, как это сделать? или, может быть, вы могли бы показать мне? Я никогда не делал этого раньше, я только что узнал, что я знаю в последние месяцы. – llw

0

Попробуйте помещать имена столбцов в обратные отступы на всякий случай, если вы используете зарезервированное слово.

0

Ответы уже размещены правильно (DROP - зарезервированное слово); Я просто хочу подчеркнуть, что синтаксис, подобный $_POST[toonname], технически некорректен - предполагается, что будут указаны нечисловые индексы: $_POST["toonname"] или $_POST['toonname']. Синтаксис, который вы используете, работает только потому, что PHP поддерживает что-то под названием «key casting» - как предупреждает doc, это, вероятно, не всегда будет поддерживаться, и это может привести к неожиданным результатам: http://php.net/manual/en/language.types.array.php#language.types.array.donts

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