Обновить запись, если параметр имеет значение - SQL, PHP

0

Мой текущий код обновляет все значения, и если есть пустой параметр, он обновляет соответствующее поле в таблице до нуля. Я хочу обновить только поля, которые имеют значение.

Это мой код:

$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;
}
  • 0
    Вы можете добавить следующее в конец вашего запроса: AND glass_id IS NOT NULL AND video_url IS NOT NULL
  • 1
    Почему вы используете параметры для каждого значения ИСКЛЮЧИТЬ WHERE id = '$drinkId' Использовать параметры для всех значений
Показать ещё 1 комментарий
Теги:

1 ответ

3
Лучший ответ

вы не хотите обновлять эти 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;
}
  • 2
    how about this? звучит больше как предложение. Добавьте больше деталей о том, почему этот код должен использоваться и почему это будет работать. Это будет полезно для ОП и других, которые могут извлечь из этого уроки, просто скопировав правильный ответ.
  • 0
    Хорошо после небольшой настройки этот код сделал свою работу! Это идея. Спасибо @MangaValk!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню