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 に答える