Я пытаюсь передать функцию 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 решения.
date('Ym-d',strtotime('+1 week'))
Создание условной части запроса
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 для получения значений даты.