0

このエラーが発生しています

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>";
}

原因がわからないので誰か教えてください??

4

1 に答える 1

2

コンストラクトがあるのにエラーが発生しているのを見ると、問題はその部分ON DUPLICATE KEYにある可能性があります。UPDATE

:nid2 回再利用していることに気付きました。2 番目のオカレンスには別のエイリアスを使用する必要があります。つまり、次のようになります。

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

次にバインド:nid2$item['nid']ます。

PDO::prepare()マニュアル エントリから:

準備済みステートメントで、同じ名前の名前付きパラメーター マーカーを 2 回使用することはできません。

于 2013-06-12T02:09:03.863 に答える