添加1至现场
如何打开以下2个查询到1个查询添加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,但主旨是我抢的程度,增加一个给它,然后更新,如果我可以将它作为一个查询来做,它似乎会更容易和更快。
编辑:$id
已被强制为一个整数,因此这次不需要转义。
我得到了downmodded这个?
$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。
$ sql =“UPDATE skills SET level = level + 1 WHERE id = $ id”;
我只是希望你在代码中的其他地方正确清理$ id!
特别是没有引号的人甚至不需要用SQL注入来逃避最后的引用 $ id =“'null'或删除技能;”;哈哈 – 2013-05-21 21:06:39
试试这个
UPDATE skills SET level = level + 1 WHERE id = $id
这样:
UPDATE skills
SET level = level + 1
WHERE id = $id
如何:
UPDATE skills SET level = level + 1 WHERE id = $id;
太:那就是从问题中粘贴英寸它没有被编辑,所以我把它归因于Markdown中的一个错误。但是,奇怪的是,我注意到了。
另外:是的,mysql_escape_string()
!
随着PDO和准备好的查询:
$query = $db->prepare("UPDATE skills SET level = level + 1 WHERE id = :id")
$query->bindValue(":id", $id);
$result = $query->execute();
我有一个问题,即如果“水平”为空,也不会增加。 – MaurerPower 2012-05-24 21:59:29