Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MkFramework Discussion :

Integrity constraint violation: 1451


Sujet :

MkFramework

  1. #1
    Membre confirmé
    Integrity constraint violation: 1451
    Salut,

    Je cherche à retourner un message lorsque je tente de supprimer une entrée BDD soumise à une contrainte.


    J'ai tenté ça dans un premier temps mais sans succès.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public function processDelete(){
    [...]
    try {
                        $oRmsVlan->delete();
                    } catch (PDOException $e) {
                        echo $e->getMessage();
                        die('toto');
                    }


    Une autre idée ?
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  2. #2
    Rédacteur

    Quand vous executez cette requete, il y a une stacktrace d'affiché

    peut etre en utlisant directement l'objet pdo


    dans votre classe model:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    try{
    $this->getSgbd()->getPdo->execute('ma requte de delete'). 
    }catch(...
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Membre confirmé
    Merci pour ce retour.

    J'ai tenté un truc du genre dans le model, car la proposition faite précédemment retournait :
    Undefined property: sgbd_pdo_mysql::$getPdo
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
            public function deleteVlan($idVlan){           
                try{
                    $this->getSgbd()->getPdo()->execute("DELETE FROM rmsVlan WHERE idVlan=$idVlan");
                }catch (PDOException $e) {
                  echo '<PRE>';var_dump($idVlan);echo '</PRE>';die('cassé');      
                }
            }


    Mais sans succès.

    Le message à l'origine de la question est celui ci :

    Fichier : /usr/share/nginx/html/mkframeworkPackage/Lib/mkframeworkLib/abstract/abstract_sgbd_pdo.php ligne 243

    Message : PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`RmsInventaire`.`rmsGrpMacAddr`, CONSTRAINT `cont_vlanGrp` FOREIGN KEY (`vlan_id`) REFERENCES `rmsVlan` (`idVlan`))
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  4. #4
    Rédacteur

    oui getPdo() ,'ai répondu de mémoire j'avais oublié les parenthèse pour appeler la méthode et non la propriété

    et le code que vous citez ne passe pas dans l'exception ?
    vous n'avez pas l'affichage de la variable (via le var_dum) avec le mot "cassé" ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #5
    Membre confirmé
    En effet "cassé" n’apparaît pas. J'ai une belle page avec Erreur 500.

    J'ai mis le die() avant l'envois de la commande et il s'affiche bien. Je l'ai ensuite mis après la commande et j'ai une erreur 500.
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein

  6. #6
    Rédacteur

    note: le code 500 doit venir de votre parametrage apache

    essayez en remplaçant le die() par un exit()
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #7
    Membre confirmé
    Bon bien tenté, mais ce n'est pas ça.

    En effet, je suis d'accord avec toi sur le fait que l'erreur 500 est du à la configuration du serveur. Puisque nous tentons d'intervenir dans le dossier /mkframeworkPackage/Lib/mkframeworkLib alors que ma configuration NGINX n'affiche sur le port http que le contenu du dossier /mkframeworkPackage/Projects/projetTruc/public.

    Pour le cas de ma gestion des produits à supprimer, je me suis débrouillé pour afficher le delete seulement si le nombre d'éléments associés à ce produit est égal à zéro. Mais cela ne va être bien plus compliqué, pour d'autre cas qui exploitent les contraintes.
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !


    Albert Einstein