PDO完整性约束违规

时间:2013-06-12 02:03:47

标签: php sql 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 个答案:

答案 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()手册:

  

您不能在预准备语句中两次使用同名的命名参数标记。