3

运行我的 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 行部分。

4

5 回答 5

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 转换为字符串,只是 '1'。)

于 2012-04-27T22:38:21.100 回答
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());
    }
}
于 2012-04-27T23:18:26.893 回答
1

“第 1 行”对应于查询的第 1 行,而不是调用它的脚本。要添加调用它的脚本行,请使用:

die('Error: ' . mysql_error() . ' in ' . $_SERVER['PHP_SELF'] . ' on line ' . __LINE__ );

至于查询,我真的没有看到任何东西跳出来。我现在唯一的建议是始终将字段名称括在反引号中,以防它们是关键字(这也使它们更易于阅读)

另外,你else if是多余的。如果$status === 1不运行,那么显然$status !== 1 必须是真的。

于 2012-04-27T22:36:43.013 回答
0

因为类型转换,status=1不是问题。我假设$id有一些问题。一旦更改$id为其他安全值(1,'foo'...),然后检查它是否有效。

于 2012-04-27T22:52:10.507 回答
-1

“第 1 行”部分是 SQL,表示它收到的 hte 消息在第 1 行有错误——SQL 尝试处理的命令的第一行。

如果我不得不猜测,状态没有设置为数字类型,因此您需要在它周围加上引号,以便 SQL 知道它正在传递一个变量。

编辑:好的,其他解决方案也可能是正确的。我们都对你的数据结构做了不同的假设,我认为他的更好。先试试看。

于 2012-04-27T22:36:11.547 回答