运行我的PHP脚本时它一直给我错误
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 '1' at line 1
这是我的sql代码,除了从表中选择之外。我已经注释掉所有这些并没有出现错误,所以我假设它出现在这段代码中。
if($status === 1){
$sqlQ = mysql_query("UPDATE tablename SET status=1 WHERE steam64='$id'");
if(!mysql_query($sqlQ, $con)){
die('Error: ' . mysql_error());
}
}else if($status !== 1){
$sqlQ = mysql_query("UPDATE tablename SET status=2 WHERE steam64='$id'");
if(!mysql_query($sqlQ, $con)){
die('Error: ' . mysql_error());
}
}
让我感到困惑的是第1行。
答案 0 :(得分:3)
你正在违反DRY原则。为什么不喜欢......
$statusValue = ($status === 1) ? 1 : 2;
$sqlQuery = mysql_query("UPDATE `14d2_group` SET `status` = $statusValue WHERE `steam64` = '$id'"):
更新2:看起来需要进一步澄清。
mysql_query函数不仅创建一个查询:它实际上发送到MySQL - 并返回结果。在UPDATE的情况下,如果查询失败,它将返回FALSE。这就是为什么你不应该像原始例子中那样调用mysql_query两次。
您可以使用mysql_affected_rows函数检查实际更新了多少行。
更新3:终于明白了。 )这就是出现错误的原因:您尝试使用上次更新查询的结果调用mysql_query。当TRUE转换为String时,只有'1'。 )
答案 1 :(得分:2)
您将一个查询的结果用作查询本身。
您可能想要做的是:
if($status === 1){
$sqlQ = mysql_query("UPDATE tablename SET status=1 WHERE steam64='$id'");
if (!$sqlQ) {
die('Error: ' . mysql_error());
}
}
else {// no need for your if-statement here because it would always be true
$sqlQ = mysql_query("UPDATE tablename SET status=2 WHERE steam64='$id'");
if(!$sqlQ){
die('Error: ' . mysql_error());
}
}
答案 2 :(得分:1)
“第1行”对应于查询的第1行,而不是调用它的脚本。要添加调用它的脚本行,请使用:
die('Error: ' . mysql_error() . ' in ' . $_SERVER['PHP_SELF'] . ' on line ' . __LINE__ );
至于查询,我真的没有看到任何东西向我跳来跳去。我现在唯一的建议是始终将字段名称括在反引号中,以防万一它们是关键字(这也使它们更清晰易读)
此外,您的else if
也是多余的。如果$status === 1
未运行,则$status !== 1
必须为真。
答案 3 :(得分:0)
由于类型转换,status=1
不是问题。我假设$id
有一些问题。将$id
更改为其他安全值(1,'foo'...)后,请检查其是否有效。
答案 4 :(得分:-1)
'第1行'部分是SQL,说它收到的消息在第1行有错误 - 这是SQL试图处理的命令的第一行。
如果我不得不猜测,状态未设置为数字类型,因此您需要在其周围加上引号,以便SQL知道它正在传递变量。
编辑:好的,其他解决方案也可能是正确的。我们都对您的数据结构做出了不同的假设,我认为他更好。先试试吧。