将1添加到字段中

时间:2008-08-08 12:34:21

标签: php mysql

如何将以下2个查询转换为1个查询

$sql    = "SELECT level FROM skills WHERE id = $id LIMIT 1;";
$result = $db->sql_query($sql);
$level  = (int) $db->sql_fetchfield('level');
$db->sql_freeresult($result);

++$level;

$sql    = "UPDATE skills SET level = $level WHERE id = $id;";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

我在phpBB mod中使用它,但要点是我抓住了关卡,添加一个然后更新,如果我可以将它作为一个查询,它似乎更容易和更快。 / p>

编辑:$id已经被强制为整数,因此这次不需要转义。

7 个答案:

答案 0 :(得分:30)

我为此得到了降级?

$sql = "UPDATE skills SET level = level+1 WHERE id = $id";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

在Teifion的特定情况下,phpBB DDL将该特定字段列为NOT NULL,因此没有增加NULL的危险。

在一般情况下,不应使用NULL来表示零。递增NULL 应该给出NULL的答案。如果你是那种被误导的开发者,他认为NULL = 0,离开键盘并找到另一种消遣,你只会让我们其他人的生活变得艰难。当然,这是计算机行业,我们是谁说你错了?如果你没错,请使用

$sql = "UPDATE skills SET level = COALESCE(level,0)+1 WHERE id = $id";

......但让我们面对现实:你错了。如果每个人都从0级开始,那么你的DDL应该包括

level INT DEFAULT '0' NOT NULL

如果程序员在创建记录时忘记设置它。如果不是每个人都从级别0开始,则跳过DEFAULT并强制程序员在创建时提供值。如果某些人超出了等级,对于有等级的人来说,这是一个毫无意义的事情,那么在他们的等级中添加一个人同样毫无意义。在这种情况下,从DDL中删除NOT NULL。

答案 1 :(得分:11)

这样:

UPDATE skills
SET level = level + 1
WHERE id = $id

答案 2 :(得分:6)

使用PDO和准备好的查询:

$query = $db->prepare("UPDATE skills SET level = level + 1 WHERE id = :id")
$query->bindValue(":id", $id);
$result = $query->execute();

答案 3 :(得分:3)

$ sql =“UPDATE技能SET级别=级别+ 1 WHERE id = $ id”;

我希望您在代码中的其他位置正确清理$ id!

答案 4 :(得分:2)

试试这个

UPDATE skills SET level = level + 1 WHERE id = $id

答案 5 :(得分:1)

怎么样:

UPDATE skills SET level = level + 1 WHERE id = $id;

答案 6 :(得分:-1)

Mat:这是从问题中粘贴的内容。它尚未经过编辑,因此我将其归结为Markdown中的错误。但奇怪的是,我注意到了。

另外:是的,mysql_escape_string()