我当前的代码更新所有值,如果参数为空,它会将表中的相应字段更新为空。我只想更新有值的字段。
这是我的代码:
$sql = "
UPDATE drinks SET
name = :name, // Mojito -> Update it
description = :description, // Lorem ipsum.. -> Update it
glass_id = :glass_id, // NULL -> do not update
video_url = :video_url // NULL -> do not update
WHERE id = '$drinkId'
";
try {
$db = new db();
$db = $db->connect();
$stmt = $db->prepare($sql);
$stmt->bindParam(':name', $drinkName);
$stmt->bindParam(':description', $description);
$stmt->bindParam(':glass_id', $glassId);
$stmt->bindParam(':video_url', $videoUrl);
$stmt->execute();
// Close databse
$db = null;
} catch(PDOException $e) {
echo $e;
}
最佳答案
您不想在这 2 个字段为空时更新它们。
这段代码检查一个字段是否为空,只有当它不为空时,它才会将该字段添加到查询中,绑定(bind)值也是如此。
$sql = 'UPDATE drinks SET';
$sql = sql . 'name = :name,';
$sql = sql . 'description = :description';
if (!is_null($glassId))
$sql = sql . ',glass_id = :glass_id';
if (!is_null($videoUrl))
$sql = sql . ',video_url = :video_url';
$sql = sql . ' WHERE id = :drinkId';
try {
$db = new db();
$db = $db->connect();
$stmt = $db->prepare($sql);
$stmt->bindParam(':name', $drinkName);
$stmt->bindParam(':description', $description);
$stmt->bindParam(':drinkId', $drinkId);
if (!is_null($glassId))
$stmt->bindParam(':glass_id', $glassId);
if (!is_null($videoUrl))
$stmt->bindParam(':video_url', $videoUrl);
$stmt->execute();
// Close databse
$db = null;
} catch(PDOException $e) {
echo $e;
}
关于php - 如果参数有值则更新记录 - SQL, PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553472/