Мой текущий код обновляет все значения, и если есть пустой параметр, он обновляет соответствующее поле в таблице до нуля. Я хочу обновить только поля, которые имеют значение.
Это мой код:
$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 поля, когда они пусты.
этот код проверяет, является ли поле нулевым, и только когда оно не является нулевым, оно добавит поле в запрос, также то же самое для привязки значения.
$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;
}
how about this?
звучит больше как предложение. Добавьте больше деталей о том, почему этот код должен использоваться и почему это будет работать. Это будет полезно для ОП и других, которые могут извлечь из этого уроки, просто скопировав правильный ответ.
AND glass_id IS NOT NULL AND video_url IS NOT NULL
WHERE id = '$drinkId'
Использовать параметры для всех значений