我正在尝试通过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
,而不是使用指定的值。
答案 0 :(得分:1)
有可能吗?
没有
有两种解决方案。
date('Y-m-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");
答案 1 :(得分:0)
使用strtotime()
代替MySQL来获取日期值。