2011-04-08 161 views
1

這似乎並沒有更新記錄。任何人都能看到爲什麼pdo準備好的聲明不更新

try { 
     $status = 'OK'; 
     $messId = 179981; 
     #die(var_dump($messId, $this->campaignId, $this->userId, $status)); 
     $stmt = $this->dbh->prepare("UPDATE tbl_inbound_responses SET status = :status, sent = '1' WHERE fk_userId = :userId AND fk_campaignId = :campId AND pk_messageId = :messId") or die("Prepare Error"); 
     $stmt->bindParam(':userId', $this->userId); 
     $stmt->bindParam(':campId', $this->campaignId); 
     $stmt->bindParam(':messId', $messId); 
     $stmt->bindParam(':status', $status); 
     $stmt->execute(); 

     #var_dump($stmt->debugDumpParams(), $stmt->errorInfo()); 

     if($err = $stmt->errorInfo()) { 
      if($err[0] != '00000') { 
       var_dump($stmt->debugDumpParams()); 
      } 
     }    

    } 
    catch(PDOException $e) { 
     die($e->getMessage()); 
    } 

腳本也有

$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

集和

$stmt->debugDumpParams(); 

報告:

SQL: [120] UPDATE tbl_inbound_responses SET status = :status, sent = '1' WHERE fk_userId = :userId AND fk_campaignId = :campId AND pk_messageId = :messId 
Params: 4 
Key: Name: [7] :userId paramno=-1 name=[7] ":userId" is_param=1 param_type=2 
Key: Name: [7] :campId paramno=-1 name=[7] ":campId" is_param=1 param_type=2 
Key: Name: [7] :messId paramno=-1 name=[7] ":messId" is_param=1 param_type=2 
Key: Name: [7] :status paramno=-1 name=[7] ":status" is_param=1 param_type=2 
NULL array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL } 

乾杯。

編輯:

我不相信這是一樣的:

PHP PDO Update prepared statement problemPHP PDO Prepared statement query not updating record

+0

@mario,感謝您的格式:d – 2011-04-08 13:38:15

回答

2

如果您沒有收到異常,那麼就沒有錯SQL查詢或PDO如何破壞它。最可能的原因是參數問題。所以嘗試調試它。用您的->bindParam來替換您的電話:

$params = array(
     ':userId' => $this->userId, 
     ':campId' => $this->campaignId, 
     ':messId' => $messId, 
     ':status' => $status, 
    ); 
    var_dump($params); 
    $stmt->execute($params); 

這可能會提示。如果失敗,請嘗試使用枚舉參數?。無論如何,在SQL中用原始「字符串值」重新運行相同的查詢以進行測試(在您選擇的任何查詢工具中)。

+0

感謝@Mario,它必須是事做綁定PARAMS。 – 2011-04-08 14:16:32

+0

它只能是params。你的代碼沒有問題。所以:} – mario 2011-04-08 14:19:18

0

問題在您的查詢!用「」而不是‘和’:

$stmt = $this->dbh->prepare("UPDATE tbl_inbound_responses SET status = :status, sent = 1 WHERE fk_userId = :userId, fk_campaignId = :campId, pk_messageId = :messId") or die("Prepare Error"); 
+0

這個問題和解決方案已經超過3年了。感謝您的意見,但很久以前就解決了。 – 2014-07-10 10:41:56