MySQL PDO NOW()作为赋值 - 是否可能?

时间:2013-04-12 10:10:04

标签: php mysql pdo

我正在尝试通过PHP将MySQL的NOW()函数传递给PDO的赋值,但它失败了。我发现我必须将它直接传递给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 个答案:

答案 0 :(得分:1)

  

有可能吗?

没有

有两种解决方案。

  1. 使用PHP计算到期日期。像date('Y-m-d',strtotime('+1 week'))
  2. 之类的东西
  3. 为查询创建条件部分

    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");
    

答案 1 :(得分:0)

使用strtotime()代替MySQL来获取日期值。