2013-04-12 21 views
0

我試圖通過PHP將MySQL的NOW()函數傳遞給PDO的指定值,並且失敗。我發現我必須直接將它傳遞給MySQL語句。但在我的情況下,有時datetime字段可以是空的。MySQL PDO NOW()作爲賦值 - 是否有可能?

是否可以通過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,而不是使用指定的值。

回答

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

我試過你的第二個建議的解決方案,它的工作完美。感謝您的幫助! –

0

使用strtotime(),而不是MySQL的創建條件部分得到的日期值。

+1

可能會發生這樣的情況,PHP和MySQL可能會有不同的時間,因爲在這種情況下,時間只對查詢很重要(稍後,我還檢查時間是否仍然只對MySQL有效),我只使用MySQL 。我不想處理MySQL和PHP之間可能的時間差異。 –

相關問題