Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将datetime sql值更新整整一年_Php_Sql - Fatal编程技术网

Php 将datetime sql值更新整整一年

Php 将datetime sql值更新整整一年,php,sql,Php,Sql,我正在尝试获取一个datetime变量(例如:2019-02-10 03:13:33)以精确更新一年。我读到datetime是以字符串的形式写的,所以我试着自己减去并加上+365 如果我去掉所有的“expirationdate”,包括bind值,代码就会工作。同样出于某些原因,我必须将我的更新保存在单引号中,因为如果它们在双引号中,则我的数据库中不会有任何更改 $stmt = $db->prepare('UPDATE usr_customer_profile SET packageid

我正在尝试获取一个datetime变量(例如:2019-02-10 03:13:33)以精确更新一年。我读到datetime是以字符串的形式写的,所以我试着自己减去并加上+365

如果我去掉所有的“expirationdate”,包括bind值,代码就会工作。同样出于某些原因,我必须将我的更新保存在单引号中,因为如果它们在双引号中,则我的数据库中不会有任何更改

 $stmt = $db->prepare('UPDATE usr_customer_profile SET packageid = 3, expirationdate = .'$oneyear'. 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();

您可以在PHP或SQL中执行此操作。在PHP中,您可以使用或(最好)类在
$\u 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中,使用
+间隔1年
将到期日期增加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();

如果日期是2月29日,会发生什么?就@TheImpaler而言,“整整一年”是什么意思+365天+一年+365.25天?有点模糊。注意:不建议将此函数用于数学运算。最好在PHP5.3及更高版本中使用DateTime::add()和DateTime::sub(),或者在PHP5.2中使用DateTime::modify()。@tim奇怪的是,他们的7个示例中有3个是数学运算。。。我将更新答案,以给出一个使用
DateTime
更改日期的示例。到目前为止,我得到了未定义的索引,所以我添加了:$stmt->bindValue(':expirationdate',isset($_SESSION['expirationdate']),PDO::PARAM_STR;但是,运行在撰写此评论时编写的答案会将我的过期日期改为所有0(0000-00-00:00:00)@JeremiahCanuto,这将不起作用,因为它会在查询中给出一个空值,这将导致语法错误。