Php SQL语法错误我是不是搞错了?
大家好,我正在尝试一个sql更新,但我想我忘记了一个“或” 我收到了这个错误消息 您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行的“Brock”='1'附近使用的正确语法,其中username='admin' 如果我将代码取出,页面加载时没有其他脚本,那么错误就出在这段代码中。但是需要两个脚本来完成更新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
$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());