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