php - MySQL PDO NOW() 作为指定值 - 这可能吗?

标签 php mysql pdo

我试图通过 PHP 将 MySQL 的 NOW() 函数传递到 PDO 的分配值中,但失败了。我发现我必须将其直接传递到 MySQL 语句中。但就我而言,有时datetime 字段可能为空。

是否可以将 NOW() 作为 PHP 的分配值传递?

一些代码:

我正在动态构建查询,并且日期时间取决于其他一些变量的值。

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,而不是使用分配的值。

最佳答案

is it possible?

没有。

有两种解决方案。

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

关于php - MySQL PDO NOW() 作为指定值 - 这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15968620/

相关文章:

php - Twitter Feed 没有引入代码?

php - YouTube数据API listChannels请求有时不会为具有多个 channel 的用户返回 channel 数据

php - 统计表 "posts"中有关表 "users"中的用户的所有帖子

mysql - 查找存储过程中四个元组的相同列表ID

mysql - 无法让 MySQL 在 OS X 10.9 上运行

php - 总是使用 MySQL 的项目应该使用 PDO 吗?

php - SQLSTATE[HY000] : General error: 2006 MySQL server has gone away creating temporary table

php - 连接表摆脱空数据

sql - 在 mysql 中重用计算列

php - PDO 准备/执行 SQL 问题