2013-06-12 115 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它:)只是说这个,因为从我之前看到的一些早期的问题,接受的答案大多有零分:) –

相关问题