web-dev-qa-db-ja.com

整合性制約違反:1062キー「PRIMARY」のエントリ「1」が重複しています

私は整合性制約違反を取得するデータベースの問題があります:1062私は自分でいくつかのことを試してみましたが、うまくいきませんでしたので、今あなたに人々が私を助けることができるかどうかを尋ねています。

elseif($action == 'add') {
if($_POST['create'] == true) {
    $title = $_POST['txtTitle'];
    $txtParentCategorie = $_POST['txtParentCategorie'];
    $txtContent = $_POST['txtContent'];

    if($txtParentCategorie == "niks") {
        $txtParentCategorie = NULL;
        $chkParent = 1;
        $order_count = countQuery("SELECT categorieID FROM prod_categorie WHERE parentID=?",array(1));
        $order = $order_count + 1;
    } else {
        $chkParent = null;
        $order_count = countQuery("SELECT categorieID FROM prod_categorie WHERE parentID is not NULL");
        $order = $order_count + 1;
    }

    Query("INSERT INTO prod_categorie (categorieID, parentID) VALUES (?, ?)", array($chkParent, $txtParentCategorie));
    $inserted_id = getLastInsertId();
    Query("INSERT INTO tekst (tabel, kolom, item_id, tekst, taalID) VALUES(?, ?, ?, ?, ?)", array('prod_categorie', 'categoriename', $inserted_id, $title, $lang));
    Query("INSERT INTO tekst (tabel, kolom, item_id, tekst, taalID) VALUES(?, ?, ?, ?, ?)", array('prod_categorie', 'content', $inserted_id, $txtContent, $lang));
    $languages = selectQuery("SELECT taalID FROM taal WHERE taalID!=?",array($lang));
}

これを実行すると、最初のINSERT INTOがデータを入力せず、次のエラーが表示されます。整合性制約違反:1062キー 'PRIMARY'のエントリ '1'が重複しています。すでにプライマリ1キーがあります。しかし、それは自動インクリメントです。 tekst表では、​​item_idの入力は0です。

Javascript:

    $('.btnAddCategorie').click(function(){
    if(busy != 1){
        busy = 1;
        var error = 0;
        var gallery = $('select[name="gallery_dropdown"]').val();
        if($('input[name="txtTitle"]').val() == ''){
            error = 1;
            alert('Het titel veld is nog leeg');
            $('input[name="txtTitle"]').focus();
        }
        if(error != 1){
            $('.content_load_icon').html('<img src="../../includes/images/layout/load_small.gif" />');
            var content = $('#cke_ckeditor').children().children().children()[3].contentWindow.document.childNodes[1].childNodes[1].innerHTML;
            $.ajax({
                url: '../../action/ac_productbeheer.php?a=add',
                type: 'POST',
                data: {txtTitle: $('input[name="txtTitle"]').val(), txtForm: $('select[name="txtForm"]').val(), customGalTitle: $('.txtCustomGalleryTitle').val(), gallery_dropdown: gallery, txtParentCategorie: $('select[name="txtParentCategorie"]').val(), txtContent: content, txtMeta: $('.txtMetaDesc').val(), create: true},
                success: function(data, textStatus, xhr) {
                    $('.content_load_icon').html('');
                    $('.txtContentConsole').html('Product succesvol opgeslagen!').show().delay(2000).fadeOut(200);
                    busy = 0;
                    saved = 1;
                    window.location = '../../modules/productbeheer/index.php';
                },
                error: function(xhr, textStatus, errorThrown) {
                    $('.content_load_icon').html('');
                    $('.txtContentConsole').html('Fout bij opslaan! Probeer het later nog een keer.').show().delay(2000).fadeOut(200);
                    busy = 0;
                }
            });
        } else {
            error = 0;
            busy = 0;
        }
    }
});

html:

<a  class="btnAddCategorie"><img name="btnOpslaan" src="/'.CMS_ROOT.'/includes/images/layout/opslaan.png" /></a><span  class="content_load_icon"></span><span  class="txtContentConsole"></span>

誰かがここで私を助けてくれることを願っています。すでにたくさんの感謝をしています。 :)

自動インクリメントフィールドを持つテーブルに挿入する場合、自動インクリメントフィールド自体を指定しないでください。

Query("INSERT INTO prod_categorie (categorieID, parentID) VALUES (?, ?)", array($chkParent, $txtParentCategorie));
                                   ^^^^^^^^^^^                    ^             ^^^^^^^^^^

ちょうどでなければなりません

Query("INSERT INTO prod_categorie (parentID) VALUES (?)", array($txtParentCategorie));

質問を受け入れて終了できるように、コメントディスカッションからの回答として追加しました。

14
asantaballa

私の場合、エラーは次のとおりです。

SQLSTATE [23000]:整合性制約違反:1062キー 'PRIMARY'の重複したエントリ '0'

解決策は問題のテーブルのすべてのレコードを空にする/切り捨てる

問題は、そのテーブルのプライマリキーで自動インクリメントが無効になっている場合、またはデータタイプが間違っている場合に発生します。

部分的に https://magento.stackexchange.com/questions/56354/admin-error-sqlstate23000-integrity-constraint-violation-1062-duplicate-ent

6
Dung

私は同じ問題を抱えていましたが、それは自動増分ではありませんでした。テーブルIDのデータ型をTINYINT(3)からINT(10)に変更しました。やってみてたぶんそれが役立つでしょう。

3
Yozaira R.

Google ExperimentをYesに設定してMagento 2を使用すると、この問題に遭遇しました。単にシャットダウンするだけで、ページ保存の問題が解決しました。しかし、カタログ製品の追加にまだ問題があり、指定されたストアのURLキーが既に存在するというエラーが表示されます。正しいフォルダーのアクセス許可を持っているにもかかわらず、画像がアップロードされていません。他の人に役立つ場合に備えて、更新を投稿します。

0