表格:Person
+------+-------+
| name | age |
+------+-------+
| abc | NULL |
+------+-------+
我想在两种情况下更新age
NULL
,请将其设置为变量$year
NULL
,请增加 $year
我有以下代码。但这并不会更新我在表中的年龄。我在做什么错了?
$sql = "UPDATE `Person`
SET age =
CASE
WHEN age == null THEN $year
ELSE age + $year
END
WHERE name='abc'";
mysqli_query($conn, $sql);
答案 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();