SQL更新,设置和案例:我在做什么错?

时间:2019-07-18 09:09:40

标签: php mysql sql mysqli sql-update

表格:Person

+------+-------+
| name |  age  |
+------+-------+
| abc  |  NULL |
+------+-------+

我想在两种情况下更新age

  1. 如果表中的年龄为NULL,请将其设置为变量$year
  2. 如果表中的年龄是 NULL,请增加 $year

我有以下代码。但这并不会更新我在表中的年龄。我在做什么错了?

$sql = "UPDATE `Person`
        SET age =
            CASE
                WHEN age == null THEN $year
                ELSE age + $year
            END
        WHERE name='abc'";
mysqli_query($conn, $sql);

1 个答案:

答案 0 :(得分:2)

您无法通过执行null直接与age = null进行比较,因为null没有类型并且属于“未定义”状态。您需要执行CASE WHEN age IS NULL,检查值是否为空

您还应该在此处使用准备好的语句,因为您直接在查询中处理变量。

$name = 'abc';
$sql = "UPDATE `Person`
        SET age =
            CASE
                WHEN age IS NULL THEN ?
                ELSE age + ?
            END
        WHERE name = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("iis", $year, $year, $name);
$stmt->execute();
$stmt->close();

您可以通过首先获取当前年龄来减少参数数量,如果为空,则为零,然后添加$year

$name = 'abc';
$sql = "UPDATE `Person`
        SET age = (CASE WHEN age IS NULL THEN 0 ELSE age END) + ?
        WHERE name = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("is", $year, $name);
$stmt->execute();
$stmt->close();