【问题标题】:Update int in MySQL Field更新 MySQL 字段中的 int
【发布时间】:2011-09-02 16:28:01
【问题描述】:

如何在 MySQL 数据库的单元格中增加 int?我知道自动增量没有用,因为我不想添加新行,只需更新现有行。我目前正在使用这个(用于澄清的POST var,已在真实代码中验证):

$columnToUpdate = 'type'.$_POST['voteid'];
$query = "UPDATE myTable $columnToUpdate = $columnToUpdate+1 WHERE id=1;";
if(!mysql_query($query)) {
    echo json_encode(array('success' => false, 'message' => 'Update failed: '.mysql_error()));
    exit;
}

在数据库中,我有 6 个字段,id、type1、type2、type3、type4、type5,以及 id 设置为 1 的单行。目的是接收一个数字 (1-5),并建立一个参考在更新字段之前到正确的列。这导致Update failed: 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 '=type4+1 WHERE id=1' at line 1,所以我猜它在增加之前没有正确地获取字段值。

一旦这个工作正常,我还需要以同样的方式减少一个字段,除非它的值是 0。所以对于奖励积分,我可以在一个查询中完成所有这些,还是拆分它会更好起来了吗?

【问题讨论】:

  • 就像我上面所说的,这被简化以找到问题的根源。当然,我不只是将 POST 数据放入查询中:)

标签: php mysql increment


【解决方案1】:

除了注入问题之外,您的工作流程似乎还需要一些工作。您确定要选择将根据 POST 变量更新的列吗?似乎您会指定列并使用变量来查找需要更新的记录:

IE: "UPDATE myTable SET votes=votes+1 WHERE id=$post_variable;"

同样,您应该将变量作为parameterized query 发送,以保护自己免受 SQL 注入。

【讨论】:

    【解决方案2】:

    我认为您在查询中错过了关键字“SET” - 请尝试

    $query = "UPDATE myTable SET $columnToUpdate = $columnToUpdate+1 WHERE id=1;";

    编辑:

    要执行“减量,除非它为零”,您可以使用以下内容:

    UPDATE myTable SET $columnToUpdate = 
    CASE $columnToUpdate 
        WHEN 0 THEN 0
        ELSE $columnToUpdate - 1
    END CASE
    WHERE id=1;`
    

    【讨论】:

    • +1 正确答案。但是对于 OP:您还需要注意@Denis 的评论并处理您的 SQL 注入安全问题。
    • 看得很清楚,先生,我好像要失明了!想尝试一下奖金问题吗?
    • (我已经编辑了我的帖子以包含对它的猜测,但我不确定我的语法是否完美)
    【解决方案3】:

    对于奖励积分,减少:

    $query = "UPDATE myTable SET '$columnToUpdate' = '$columnToUpdate'-1 WHERE id=1 AND '$columnToUpdate' > 0";
    

    【讨论】:

    • 不错的一个,它也将与原版相结合。有点懒得问了,谢谢!
    猜你喜欢
    • 2011-07-19
    • 2013-04-14
    • 2011-05-11
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多