如果有关个人资料的信息已过时,我想在一个人的名字后面添加一个星号(*)。
唐纳德
$stmt = $conn->prepare("UPDATE contacts SET name = concat(name, '*') WHERE phone = ?");
$stmt->bind_param("s",$phone);
$stmt->execute();
唐纳德*
第一次可以正常运行,但是如果没有任何更改,并且我更新了配置文件,它会添加另一个星号,因此名称为 唐纳德**。下次是唐纳德***等。
如何检查名称是否已经带有星号,如果没有,什么都不做?
答案 0 :(得分:2)
您可以使用right()
来检查最后一个字符是否为*
,并且仅在不是这种情况时才更新行。
UPDATE contacts
SET name = concat(name, '*')
WHERE phone = ?
AND right(name, 1) <> '*';
答案 1 :(得分:0)
一种方法是在导出新值的表达式中使用条件测试。例如
UPDATE contacts
SET name = CONCAT(name, CASE
WHEN name LIKE '%*' THEN ''
ELSE '*'
END
)
WHERE phone = ?