我的MySQL更新查询有什么问题?

时间:2013-03-16 21:13:21

标签: php mysql post syntax

出于某种原因,我在使用编辑脚本时遇到此错误。 我甚至尝试填写POST值并通过PHPmyAdmin执行。这是我得到的错误:

#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 name =' $ _ POST [toonname]',tlaff = $ _ POST [tlaff],ttype = $ _ POST [ttype],toonup = $ _ POST [toonup],trap = $ _ POST [陷阱],lure = $ _ POST [lure],sound = $ _ POST [sound],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 name =' ik',tlaff = 137,ttype = 2,toonup = 1,trap = 1,lure = 1,sound = 1,throw = 1,squirt = 1,drop = 1,卖出= 10,现金= 10,法律= 7,boss = 1 WHERE ID = 11

除名称外,所有列均为INT。名称是varchar

4 个答案:

答案 0 :(得分:3)

单词drop是保留关键字。使用反引号逃脱它。

像这样:

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

答案 1 :(得分:2)

你的问题在于dropDROP是MySQL中的保留字,因此您需要将其封装在反引号中

`drop` = 1

但是,您的陈述中还有其他问题。您容易受到SQL Injection

的影响

答案 2 :(得分:0)

尝试将列名添加到反引号中,以防您使用保留字。

答案 3 :(得分:0)

已发布的答案是正确的(DROP是保留字);我只是想说明$_POST[toonname]这样的语法在技术上是不正确的 - 应该引用非数字索引:$_POST["toonname"]$_POST['toonname']。您使用的语法只能起作用,因为PHP支持称为“密钥转换”的东西 - 正如文档警告的那样,这可能不会始终受到支持,并且可能会产生意外结果:http://php.net/manual/en/language.types.array.php#language.types.array.donts