2011-12-29 107 views
-3

您好球员和女孩我尝试到SQL更新,但认为我忘了“或” 即时得到这个错误messegeSQL语法错误,我是否错误?

您的SQL语法错误;检查对应于你的MySQL服务器版本的手册在第一行使用'Brock'='1'WHERE username ='admin''附近使用正确的语法

错误在于在这段代码中,如果我将代码从页面载入但它需要两个更新

$blah = mysql_query("UPDATE users SET '".$_SESSION['gymleader']."'='1'WHERE username = '".$_SESSION['username']."'") 
or die(mysql_error()); 

我是我吗?出错了?

+2

您有一个名为Brock的专栏?......爱你的硬编码!这会在未来造成大量问题。列名不是要用'引用的字符串'如果他们确实需要引用,因为它们是保留字,那么您使用反引号' – 2011-12-29 12:47:13

+0

http://xkcd.com/327/ – 2011-12-29 12:47:19

+0

错误消息指出您直接指向您的错误。请参阅Robin的答案以获取更多信息,并仔细阅读计算机说的内容以及键入的内容:) – Matten 2011-12-29 12:47:49

回答

1

除了这个事实,这看起来像一个坏主意,像这样的代码,假设你有一个名为布鲁克列,那么你应该使用这种类型的引号来代替:

$blah = mysql_query("UPDATE users SET `".$_SESSION['gymleader']."`='1' WHERE username = '".$_SESSION['username']."'") 
or die(mysql_error()); 

公告我将'替换为`

+0

感谢您接近并且不会像其他人那样关注' – user1121083 2011-12-29 13:02:36

+1

@nute, Stackoverflow使用反引号来标记代码 - 这也是通过缩进来实现的,然后让反引号不受影响。我相应地修改了你的答案。 – 2011-12-29 13:04:19

2

如果我没有弄错,你会错过'1'和WHERE之间的空格。你应该使用反引号(')当你想逃避列名

所以,你的代码就变成了:

$blah = mysql_query("UPDATE users SET `".$_SESSION['gymleader']."`='1' WHERE username = '".$_SESSION['username']."'") 

注意',而不是'绕柱名(SET之后)。

进一步可能的改进:

  1. 如果列是int类型的,你可以在'1'通过1更换(不“)
  2. 你不应该直接使用$_SESSION$_POST$_GET或其他值可以由用户在您的查询中更改。做SQL injection谷歌搜索以获取更多信息
+0

仍显示错误 – user1121083 2011-12-29 12:48:23

+1

您是否也照顾过Mark Ba​​ker的注释(在列名称周围使用反引号,并且仅在需要时)? – Robin 2011-12-29 12:50:36

+0

不,我不知道他在做什么,请解释一下? – user1121083 2011-12-29 12:57:46

2
UPDATE user SET field = '1' WHERE ... 

,而不是

UPDATE user SET 'field' = '1' WHERE ... 

,如果你的领域是int类型,你可以使用

UPDATE user SET field = 1 WHERE 

如果你想逃避你的字段名称,使用

`field` 

在反引号`

+0

如果你有“领域”进入会议virable $ _SESSION ['gymleader']我得到''布洛克'= 1其中用户名='admin''如果你注意到有2''在brock这个词的前面也许这就是问题所在? – user1121083 2011-12-29 12:57:19

+0

that would be mysql_query(“UPDATE users SET”。$ _ SESSION ['gymleader']。“='1'WHE ... – kontur 2011-12-29 13:05:41