web-dev-qa-db-de.com

Verletzung der Integritätsbedingung: 1062 Doppelter Eintrag '1' für Schlüssel 'PRIMARY'

Ich habe ein Problem mit der Datenbank, bei dem ich eine Verletzung der Integritätsbeschränkung erhalte: 1062 ... Ich habe ein paar Dinge selbst ausprobiert, aber es hat nicht funktioniert. Jetzt frage ich euch, ob ihr mir helfen könnt.

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

wenn ich dies ausführt, füllt der erste INSERT INTO keine Daten ein und gibt diesen Fehler aus: Verletzung der Integritätsbedingung: 1062 Doppelter Eintrag '1' für Schlüssel 'PRIMARY' Dort ist bereits ein Primärschlüssel 1 vorhanden. aber es ist auf auto inkrementieren . in der tekst-tabelle erhält die item_id eine 0-Eingabe.

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>

Hoffe, jemand kann mir hier weiterhelfen . Vielen Dank schonmal. :)

Beim Einfügen in eine Tabelle mit einem Auto-Increment-Feld sollte das Auto-Increment-Feld selbst überhaupt nicht angegeben werden.

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

Sollte gerade sein

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

Nur als Antwort aus der Kommentardiskussion hinzugefügt, damit die Frage akzeptiert und beendet werden kann.

13
asantaballa

in meinem Fall lautet der Fehler:

SQLSTATE [23000]: Verletzung der Integritätsbedingung: 1062 Doppelter Eintrag '0' für Schlüssel 'PRIMARY'

Die Lösung besteht darin, alle Datensätze der betreffenden Tabelle zu leeren/abzuschneiden

Das Problem tritt auf, wenn das automatische Inkrementieren von für den Primärschlüssel dieser Tabelle deaktiviert ist oder der Datentyp falsch ist. 

teilweise gutgeschrieben https://magento.stackexchange.com/questions/56354/admin-error-sqlstate23000-integrity-constraint-violation-1062-duplicate-ent

5
Dung

Ich hatte das gleiche Problem und es war nicht das automatische Inkrement, das es verursachte. Ich habe den Datentyp meiner Tabellen-ID von TINYINT(3) in INT(10) geändert. Versuch das. Vielleicht hilft es.

1
Yozaira R.

Dieses Problem ist mir bei der Verwendung von Magento 2 mit dem Google-Experiment auf Ja aufgefallen. Wenn Sie es einfach abschalten, wurde das Problem beim Speichern meiner Seite behoben. Es gibt jedoch immer noch Probleme beim Hinzufügen von Katalogprodukten. Es wird ein Fehler angezeigt, dass der URL-Schlüssel für den angegebenen Speicher bereits vorhanden ist. und das Bild wird nicht hochgeladen, obwohl ich korrekte Ordnerberechtigungen habe. Wird ein Update posten, falls es anderen hilft.

0