我一直在寻找解决方案,但没有找到简单的解决方案。例如,这个链接谈到了这一点,但对我没有太大帮助:MySQL更新列仅当值不为空时
以下是我想要实现的目标:
$stmt = $dbh->prepare("UPDATE table_name SET field1 = :value1, field2 = :value2 WHERE id = :id");
$stmt->bindValue(':value1', $value1, PDO::PARAM_STR);
if(!empty($value2)) $stmt->bindValue(':value2', $value2, PDO::PARAM_STR); // if the field was present in the form, otherwise IGNORE it
$stmt->bindValue(':key', $key, PDO::PARAM_INT);
$stmt->execute();
我见过一些使用COALESCE的解决方案,但它只会使值为空。
我认为您应该检查应该更新哪些数据,以及在为这些字段生成更新SQL语句时。
- 选择数据WHERE id=:id
- 检查是否需要更新某些字段
- 仅为此类字段生成和执行更新