Php SQL语法错误我是不是搞错了?

Php SQL语法错误我是不是搞错了?,php,mysql,sql,Php,Mysql,Sql,大家好,我正在尝试一个sql更新,但我想我忘记了一个“或” 我收到了这个错误消息 您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行的“Brock”='1'附近使用的正确语法,其中username='admin' 如果我将代码取出,页面加载时没有其他脚本,那么错误就出在这段代码中。但是需要两个脚本来完成更新 $blah = mysql_query("UPDATE users SET '".$_SESSION['gymleader']."'='1'WHERE user

大家好,我正在尝试一个sql更新,但我想我忘记了一个“或” 我收到了这个错误消息

您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行的“Brock”='1'附近使用的正确语法,其中username='admin'

如果我将代码取出,页面加载时没有其他脚本,那么错误就出在这段代码中。但是需要两个脚本来完成更新

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

我是否出错了?

如果我没有弄错的话,您会在“1”和
之间漏掉一个空格,在
中。如果您想转义列名,您应该使用倒勾(`)

因此,您的代码变成:

$blah = mysql_query("UPDATE users SET `".$_SESSION['gymleader']."`='1' WHERE username = '".$_SESSION['username']."'")
请注意列名周围的“而不是”(就在
集合的后面)

进一步可能的改进:

  • 如果列的类型为INT,则可以将
    '1'
    替换为
    1
    (不带')
  • 您不应直接使用
    $\u SESSION
    $\u POST
    $\u GET
    或其他可由用户在查询中更改的值。有关详细信息,请在上进行谷歌搜索
  • 而不是

    UPDATE user SET 'field' = '1' WHERE ...
    
    如果字段的类型为int,则可以使用

    UPDATE user SET field = 1 WHERE
    
    如果要转义字段名,请使用

    `field`
    

    在backticks`

    中,除了这样编码看起来是个坏主意之外,假设您有一个名为Brock的列,那么您应该使用以下类型的引号:

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

    请注意,我将您的
    '
    替换为
    `

    您有一个名为Brock?…热爱您的硬编码!这将在将来给您带来大量问题。列名不是要引用的字符串,使用“如果它们是保留字,因此确实需要引用,那么您可以使用倒勾”`错误消息直接指向您的错误或者。有关更多信息,请参阅Robin的答案,并仔细阅读计算机上的内容和您键入的内容:)哇。我认为查看表格结构会有所帮助。您是否也注意到Mark Baker的评论(在列名周围使用反勾号,并且仅在需要时使用)?不,我不知道他在说什么,请解释一下?我更新了我的答案,并在其中包含了其他人的一些评论。希望你现在明白了。我想将你的“字段”更改为会话虚拟$\u会话['gymleader']如果你注意到Brock一词前面有2个,我得到的是'Brock'=1,其中username='admin'',这可能是问题所在?这可能是mysql\u查询(“更新用户集”。$\u会话['gymleader']='1'WHE…谢谢你开门见山,没有像其他人那样对“@nute”进行指责,Stackoverflow使用反引号来标记代码-这也是通过缩进实现的,缩进后反引号不受影响。我相应地修改了你的答案。
    $blah = mysql_query("UPDATE users SET `".$_SESSION['gymleader']."`='1' WHERE username = '".$_SESSION['username']."'")
    or die(mysql_error());