0

テーブルで定義された自動インクリメントフィールドである主キーの重複エントリエラーが発生します。

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: 
Integrity constraint violation: 1062 Duplicate entry '0' for key 1' in

ほぼ同時にテーブルにエントリを追加しようとしています。それが考えられる理由かもしれませんが、私にはわかりません。

実際には、複数のajax呼び出しが舞台裏で実行されており、同じ主キーを使用して同時にテーブルにエントリを追加しようとしている場合があります。

これは、SQLエンジンによる同じ主キーの自動生成の問題だと思います。

Mysqlテーブルタイプ:MyISAM。

これを修正するために何ができるでしょうか?

テーブル定義:result_idは主キーフィールドです

テーブルの定義

昨年のこのデータバインドされたオブジェクトを使用していて問題は見つかりませんでしたが、データベースエントリ用にPDOラッパーを作成しました。コメントで要求されたように一部を添付します。

注:ID(主キー)はINSERTステートメントの一部ではありません。

$valueList = "";
$query     = 'INSERT INTO ' . $this->tableName . ' (';


foreach ($this->relationMap as $key => $value) {
    eval('$actualVal = &$this->' . $value . ';');

    if (isset($actualVal)) {
        if (array_key_exists($value, $this->modifiedRelations)) {
            $query .= $key . ', ';
            $valueList .= ":$value, ";
        }
    }
}


$query = substr($query, 0, strlen($query) - 2);

$valueList = substr($valueList, 0, strlen($valueList) - 2);
$query .= ") VALUES (";
$query .= $valueList;
$query .= ")";
//prepare and execute codes - here
$this->ID = $this->objPDO->lastInsertId();
4

3 に答える 3

3

これを読む

または

sanpshotに従って、result_idをすでに主キーに設定しました

しかし、あなたが設定していないのはauto_incrementだと思います

auto_incrementで主キーを設定してください

于 2012-07-29T17:45:21.960 に答える
0

最初にid=1(最初のレコード)の行を削除してから、idフィールドのAuto_Increment属性を「True」に設定してテーブル構造を編集します(Auto_Incrementチェックボックスをクリックして保存します)。

于 2015-04-19T01:48:42.960 に答える
0

((AUTO_INCREMENT))であることを確認してください

于 2015-05-05T15:31:16.987 に答える