MySQL PDO NOW () как назначенное значение – возможно ли это?

Я пытаюсь передать функцию NOW() MySQL в назначенное значение PDO через PHP, и это не работает. Я обнаружил, что должен передать это непосредственно в инструкции MySQL. Но в моем случае иногда поле datetime может быть пустым.

Возможно ли даже передать значение NOW() как присвоенное значение PHP?

Некоторый код:

Я строю запрос динамически, а время datetime зависит от значения другой переменной.

 if(isset($accountStatus)&&$accountStatus!=""){ $tmp[':account_status']=$accountStatus; if($accountStatus==0){ $tmp[':vCodeExpire']="NOW() + INTERVAL 1 WEEK"; $tmp[':verified']=0; }else{ $tmp[':verified']=1; } } 

Построение SQL-запроса:

 $sql=""; foreach($tmp as $k=>$v){ $sql.=str_replace(":","",$k)."=".$k.","; } $sql=substr($sql,0,strlen($sql)-1); 

Затем я запускаю запрос PDO:

 $db=$pdo->prepare("UPDATE users SET $sql WHERE id=:id"); $db->execute($tmp); 

Я попытался заменить двойные кавычки одиночной кавычкой вокруг NOW() + INTERVAL 1 WEEK без везения. Я также пробовал с одной цитатой по запросу PDO, но тогда $sql передается напрямую, не используя назначенные значения.

Является ли это возможным?

Нет.

Есть 2 решения.

  1. Рассчитайте дату истечения срока действия с помощью PHP. Что-то вроде date('Ym-d',strtotime('+1 week'))
  2. Создание условной части запроса

     if(isset($accountStatus)&&$accountStatus!=""){ $tmp[':account_status']=$accountStatus; if($accountStatus==0){ $accSql = "NOW() + INTERVAL 1 WEEK,"; $tmp[':verified']=0; }else{ $accSql =''; $tmp[':verified']=1; } $db=$pdo->prepare("UPDATE users SET $accSql $sql WHERE id=:id"); 

Используйте strtotime() вместо MySQL для получения значений даты.