我收到此错误
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>";
}
我不知道为什么,有人可以告诉我吗??
答案 0 :(得分: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()
手册:
您不能在预准备语句中两次使用同名的命名参数标记。