web-dev-qa-db-fra.com

Violation de contrainte d'intégrité: 1062 Entrée en double '1' pour la clé 'PRIMARY'

J'ai un problème de base de données où j'obtiens une violation de contrainte d'intégrité: 1062 . J'ai essayé certaines choses par moi-même mais cela n'a pas fonctionné, je vous demande maintenant de vérifier si vous pouvez m'aider.

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

lorsque je lance ceci, le premier INSERT INTO ne remplit aucune donnée et donne cette erreur: Violation de contrainte d'intégrité: 1062 Entrée en double '1' pour la clé 'PRIMARY' il y a déjà une clé primaire 1 dedans. mais il est sur incrémentation automatique . dans le tableau précédent l'élément item_id obtient une entrée 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>

J'espère que quelqu'un pourra m'aider ici . Déjà beaucoup de mercis d'avance. :)

11

Lors de l'insertion dans une table avec un champ d'incrémentation automatique, le champ d'incrémentation automatique lui-même ne doit pas être spécifié.

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

Devrait être juste

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

Vient d’ajouter la réponse de la discussion de commentaire pour permettre d’accepter et de terminer la question.

13
asantaballa

dans mon cas l'erreur est:

SQLSTATE [23000]: Violation de contrainte d'intégrité: 1062 Entrée en double '0' pour la clé 'PRIMARY'

la solution consiste à vider/tronquer tous les enregistrements de la table en question

Le problème se produit lorsque l'incrémentation automatique est désactivée sur la clé primaire de cette table ou que le type de données est incorrect. 

partiellement crédité sur https://magento.stackexchange.com/questions/56354/admin-error-sqlstate23000-integrity-constraint-violation-1062-duplicate-ent

5
Dung

J'ai eu le même problème, et ce n'était pas l'incrément automatique qui le causait. J'ai changé le type de données sur mon identifiant de table de TINYINT(3) à INT(10). Essayez ça. Peut-être que ça va aider.

1
Yozaira R.

Je suis tombé sur ce problème lorsque j'utilisais Magento 2 avec Google Experiment réglé sur Oui. Le simple fait de le fermer a résolu le problème de sauvegarde de ma page. Bien que le problème avec l'ajout de produits de catalogue pose toujours un problème, la clé URL du magasin spécifié existe déjà. et l'image ne télécharge pas même si j'ai les autorisations de dossier appropriées. Publiera une mise à jour au cas où cela aiderait quelqu'un d'autre.

0
Joshua Berkowitz