将datetime sql值更新一年

时间:2019-01-23 03:58:08

标签: php sql

我试图获取日期时间变量(例如:2019-02-10 03:13:33)以精确更新一年。我读到datetime是用字符串写的,所以我尝试自己减去并加+365。

如果我取出所有包括绑定值的“ expirationdate”,该代码将起作用。同样由于某种原因,我必须将UPDATE括在单引号中,因为如果数据库中的双引号内没有变化,则数据库中没有任何更改。

redirect: 'manual'

1 个答案:

答案 0 :(得分:1)

您可以使用PHP或SQL执行此操作。在PHP中,您可以使用strtotime或(最好)使用DateTime类将$_SESSION['expirationdate']中的值加一年:

// using strtotime
$expirationdate = date('Y-m-d H:i:s', strtotime($_SESSION['expirationdate'] . ' + 1 year'));
// using DateTime
$expiration = new DateTime($_SESSION['expiration_date']);
$expiration->add(new DateInterval('P1Y'));
$expirationdate = $expiration->format('Y-m-d H:i:s');
// do the query
$stmt = $db->prepare('UPDATE usr_customer_profile
                      SET packageid = 3, 
                          expirationdate = :expirationdate 
                      WHERE usrcustomerid = :usrcustomerid');
$stmt->bindValue(':expirationdate', $expirationdate, PDO::PARAM_STR);
$stmt->bindValue(':usrcustomerid', $_SESSION['usrcustomerid'], PDO::PARAM_INT);
$oneyear = (':expirationdate' - ':expirationdate') + 365;
$stmt->execute();

在SQL中,使用+ INTERVAL 1 YEAR将有效期增加1年:

$stmt = $db->prepare('UPDATE usr_customer_profile
                      SET packageid = 3,
                          expirationdate = :expirationdate + INTERVAL 1 YEAR
                      WHERE usrcustomerid = :usrcustomerid');
$stmt->bindValue(':expirationdate', $_SESSION['expirationdate'], PDO::PARAM_STR);
$stmt->bindValue(':usrcustomerid', $_SESSION['usrcustomerid'], PDO::PARAM_INT);
$oneyear = (':expirationdate' - ':expirationdate') + 365;
$stmt->execute();