0

我试图NOW()通过 PHP 将 MySQL 的函数传递给 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直接传递,而不是使用分配的值。

4

2 回答 2

1

是否可以?

不。

有2个解决方案。

  1. 使用 PHP 计算到期日期。就像是date('Y-m-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");
    
于 2013-04-12T10:17:36.410 回答
0

使用strtotime()而不是 MySQL 来获取日期值。

于 2013-04-12T10:22:32.657 回答