在MySQL字段中更新int

时间:2011-05-26 14:44:52

标签: php mysql increment

如何在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.所以对于奖励积分,我可以在一个查询中完成所有这些或者将它拆分更好吗?吗?

3 个答案:

答案 0 :(得分:13)

我认为您错过了查询中的关键字“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 :(得分:3)

对于奖励积分,减少:

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

答案 2 :(得分:0)

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

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

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