Задать вопрос
@Deman1

Как прибавить к текущей дате дни?

Здравствуйте, подскажите как добавить дни к дате для sql, добавить надо к date_end только количество дней может быть разное 3, 15, 20,55 и тд, как сделать чтобы запрос сразу генерировался с количеством дней?
$sql = "INSERT INTO `order` SET ";
$sql .= "user_id = '" . (int)$user_id . "', ";
$sql .= "status = '0', ";
$sql .= "date = NOW()";
$sql .= "date_end = ????????????";
$db->query($sql);
  • Вопрос задан
  • 797 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
@Akela_wolf
Extreme Programmer
Во-первых, никогда, не собирайте SQL-запрос по кускам с помощью конкатенации строк. Это очень, очень, ОЧЕНЬ, плохой способ, за который тысячи разработчиков поплатились взломом сайтов через SQL-injection. Используйте параметры запроса.

Во-вторых, у вас в запросе ошибка: INSERT и SET не могут использоваться совместно.

В-третьих, проще всего воспользоваться функцией DATE_ADD, передавая ей количество дней как параметр, например так:
$pdo->prepare("INSERT INTO `order`(user_id, date, date_end) VALUES(:userId, :date, DATE_ADD(:date, INTERVAL :days DAY))")
	->execute(["userId" => 100,
			   "date" => date("Y-m-d"),
			   "days" => 10
			  ]);


Полный пример

Обратите внимание: phpize.online предоставляет объект $pdo. Вам в вашем коде придется его инициализировать вручную, либо понять как использовать параметры вместе с тем объектом $db, который у вас есть. Если это Laravel - то он тоже умеет аналогичным образом подставлять параметры.
Ответ написан
Newto
@Newto
$plus_days = 3;
$sql = "INSERT INTO `order` SET ";
$sql .= "user_id = '" . (int)$user_id . "', ";
$sql .= "status = '0', ";
$sql .= "date = NOW()";
$sql .= "date_end = NOW() + INTERVAL {$plus_days} DAY";
$db->query($sql);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
В случае MySQL просто прибавить соотв. INTERVAL:
INSERT INTO `order`
SET ...
    date_end = CURRENT_DATE + INTERVAL :days_to_add DAY

В других СУБД - использовать функцию DATEADD().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы