IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

PHP & Base de données Discussion :

Insert into + delete from [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Par défaut Insert into + delete from
    Bonjour,

    petit problème de requête, je souhaite archiver un projet dans une table archive et ensuite le supprimer de la table projet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $insertArchiver = $bdd->prepare("INSERT INTO `bdd`.`archive` (`IDARCHIVE`, `IDPROJET`, `LIBELLE`, `URLSITE`, `DATEARCHIVE`, `DATEDEBUT`, `DATEFIN`, `BUDGET`, `ACTIVITE`, `TEMPSPASSE`)
        VALUES (NULL, '$idProjet', '$libelle', '$urlSite', NOW(), '$dateDebut', '$dateFin', '$budget', '$activite', '$tempsPasse');");
    $insertArchiver->execute();
    var_dump($insertArchiver);
     
    $deleteProjet = $bdd->prepare("DELETE FROM  `bdd`.`projet` WHERE  `projet`.`IDPROJET` = '$idProjet';");
    $deleteProjet->execute();
    var_dump($deleteProjet);
    Le projet est bien archivé mais la requête delete ne fonctionne pas, trouvez-vous mon problème ??

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 194
    Par défaut
    Bonjour,

    As-tu un message d'erreur sur ton delete ?

  3. #3
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Comme ça je peux pas te dire d'ou vient ton erreur, pousse le reporting d'erreur pour voir ce que réponds le serveur MySQL.

    Au passage, quand il s'agit d'archiver des entrées, si la table d'archive à le même format que la table d'origine (ce qui est généralement le cas) on peut utiliser cette syntaxe d'insert:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $bdd->exec('INSERT INTO projects_archive SELECT * FROM projects WHERE id=1');

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Par défaut
    Voici ce que me donne le var_dump, sinon aucune erreur non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    object(PDOStatement)[7]
      public 'queryString' => string 'DELETE FROM  `bdd`.`projet` WHERE  `projet`.`IDPROJET` = '8';' (length=66)
    Il prend bien la bonne valeur de IDPROJET

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Par défaut
    Sinon, non la table archive a un champ de plus (dateArchive) ainsi que la clé étrangère la reliant au projet.

    Merci

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 194
    Par défaut
    Juste au cas ou, essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $deleteProjet = $bdd->prepare("DELETE FROM  `bdd`.`projet` WHERE  `projet`.`IDPROJET` = \"$idProjet\";");

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Par défaut
    Change rien non plus, merci quand même

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Essaie la requête valorisée dans phpMyAdmin pour vérifier qu'il n'y a pas une erreur telle qu'une contrainte d'intégrité qui serait violée à cause de la suppression de la référence dans une clé étrangère d'une autre table.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Par défaut
    Comment ça une requête valorisée ??

    Dans phpmyadmin ma requête delete from marche très bien !

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Par défaut
    On m'a conseillé d'utiliser un trigger, mais j'ai toujours un problème :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DROP TRIGGER IF EXISTS `tai_delete_projet` ;
    CREATE DEFINER = ``@`` TRIGGER `tai_delete_projet` AFTER INSERT ON `archive`
    FOR EACH
    ROW BEGIN
    DELETE FROM `bdd`.`projet` WHERE `projet`.`IDPROJET` IN (
    SELECT `archive`.`IDPROJET`
    FROM `bdd`.`archive`
    );
    END

    où après chaque insertion dans la table archive, je supprime le projet ayant le même IDPROJET. Mon trigger est accepté mais lors d'une insertion dans la table archive j'ai une erreur concernant la clé étrangère entre archive et projet !

  11. #11
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    Bonjour,

    Ta table archive est lié à ta table projet via l'idProjet.
    Tu as mis une contrainte qui est inutile, retire la et ça devrait fonctionner

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Par défaut
    J'ai supprimé cette clé étrangère, le problème maintenant est avec une autre table en liaison avec projet toujours, en fait toutes les tables en liaison avec projet vont me poser ce problème. Je ne vais pas supprimer toutes mes relations pour ce trigger ... je sais pas comment faire

  13. #13
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    La clé projet ce trouve dans plusieurs tables, tu dois donc supprimer tous les informations liés à ton projet pour pouvoir supprimer le dit projet.

    Maintenant pq tu fais pas un boolean isArchive avec une date archive dans ta table projet et quand tu archive un proj tu passe le boolean a true.

    Ta table archive n'existe plus et les projet hors archive on le boolean a false donc tu rajoute une verif dans tes clause where.

    Ca te fait une table en moins et moins de prise tête sur l'archivage

  14. #14
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Ton problème est probablement que le projet que tu supprimes pour l'archiver est référencé dans d'autres tables. Il faut donc que ces références soient supprimées également. Normalement, on fait ça avec une contrainte ON DELETE CASCADE sur la clé étrangère mais vérifie quand même s'il ne faut pas que tu archives également les informations dépendantes du projet.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Par défaut
    Merci à vous, j'ai utilisé la technique de jouana et ça fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/07/2012, 11h32
  2. insert into table from another table
    Par ALTHON dans le forum Développement
    Réponses: 1
    Dernier message: 08/06/2012, 08h51
  3. [AC-2003] souci utilisation de INSERT INTO- SELECT- FROM- WHERE
    Par eugene_françois dans le forum Modélisation
    Réponses: 1
    Dernier message: 16/04/2010, 16h14
  4. insert into from select ?
    Par axel584 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 25/01/2005, 18h10
  5. Incrémenter champ : insert into . select max(.) + 1 from .
    Par ludo.guy dans le forum Langage SQL
    Réponses: 10
    Dernier message: 25/11/2004, 14h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo