2013-06-12 158 views
0

我收到此錯誤PDO完整性約束違規

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 1 

在我的表,我沒有主鍵與0和echo $item['nid']沒有0值也是如此。

$insertTotalRes = $conWS->prepare('INSERT INTO totalresponses (nid, created) VALUES(:nid, :created) ON DUPLICATE KEY UPDATE nid = :nid , created = :created '); 
$conWS->beginTransaction(); 
try{ 
    foreach ($output as $key=>$item){ 
    $insertTotalRes->bindParam(':nid', $item['nid']); 
    $insertTotalRes->bindParam(':created', $item['created']); 
    $insertTotalRes->execute(); 
    } 
$conWS->commit(); 
}catch (PDOException $e){ 
    $conWS->rollback(); 
    echo "FAIL TO ADD ".$e->getMessage()."<br>"; 
} 

但用這種方法我沒有得到錯誤。

$conWS->beginTransaction(); 
try{ 
    foreach ($output as $key=>$item){ 
    $insertTotalRes = $conWS->prepare('INSERT INTO totalresponses (nid, created) VALUES('.$item['nid'].', '.$item['created'].') ON DUPLICATE KEY UPDATE nid = '.$item['nid'].' , created = '.$item['created'].' '); 
    $insertTotalRes->execute(); 
    } 
$conWS->commit(); 
}catch (PDOException $e){ 
    $conWS->rollback(); 
    echo "FAIL TO ADD ".$e->getMessage()."<br>"; 
} 

我不知道爲什麼,任何人都可以告訴我?

回答

1

即使您有ON DUPLICATE KEY結構,但看到如何出現錯誤,問題可能在UPDATE部分。

我注意到你重複使用了兩次:nid;你將要使用不同的別名第二次出現,即:

INSERT INTO totalresponses (nid, created) 
VALUES(:nid, :created) 
ON DUPLICATE KEY UPDATE nid = :nid2, created = :created '); 

然後綁定:nid2$item['nid']

PDO::prepare()手工錄入:

你不能在一份聲明中使用相同的名稱的命名參數標記的兩倍。

+0

你是對的,謝謝你的幫助。 – Eric

+0

@Eric不客氣,順便說一句,如果一個答案是有幫助的,你可以upvote它:)只是說這個,因爲從我之前看到的一些早期的問題,接受的答案大多有零分:) –

相關問題