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

Requêtes MySQL Discussion :

Aucune erreur affichée, mais le tableau n'est pas modifié


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Aucune erreur affichée, mais le tableau n'est pas modifié
    J'ai écrit quelques lignes de codes php pour injecter de nouvelles entrées dans une table mysql. Aucune erreur n'est affichée, les fonctions echo renvoient les bonnes données,
    mais rien ne change au niveau de la table mysql.
    je ne comprends pas le problème.

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    $i=16;
    while ($i<22){
    if($i==16){$mat1=array(11,19);$mat2=array(12,12);$coutMat1=array(1000,2000);$coutMat2=array(1000,2000);$demande=13;}
    elseif($i==17){$mat1=array(11,19);$mat2=array(12,12);$coutMat1=array(1000,2000);$coutMat2=array(1000,2000);$demande=13;}
    elseif($i==18){$mat1=array(11,19);$mat2=array(15,15);$coutMat1=array(1000,2000);$coutMat2=array(1000,2000);$demande=15;}
    elseif($i==19){$mat1=array(12,12);$mat2=array(0,0);$coutMat1=array(4000,8000);$coutMat2=array(0,0);$demande=11;}
    elseif($i==20){$mat1=array(11,18);$mat2=array(0,11);$coutMat1=array(2000,2000);$coutMat2=array(0,2000);$demande=16;}
    elseif($i==21){$mat1=array(15,20);$mat2=array(0,15);$coutMat1=array(2000,2000);$coutMat2=array(0,2000);$demande=9;}
    $seriMat1=serialize($mat1);
    $seriMat2=serialize($mat2);	
    $seriCoutMat1=serialize($coutMat1);
    $seriCoutMat2=serialize($coutMat2);
    $industrie=new BaseIndustrie (array('mat1'=>$seriMat1,'mat2'=>$seriMat2,'coutMat1'=>$seriCoutMat1,'coutMat2'=>$seriCoutMat2,'produit'=>$i,'demande'=>$demande,'id'=>$i));
    $geri->addI($industrie);echo '<pre>';print_r($industrie);echo '</pre>';
    $i++;}
     
     
      public function addI(BaseIndustrie $perso)
      {
        $q = $this->db->prepare('INSERT INTO aindustrie SET
    	demande = :demande ,produit=:produit,mat1=:mat1,coutMat1=:coutMat1,mat2=:mat2,coutMat2=:coutMat2,id=:id');
    	$q->bindValue(':demande', $perso->demande());
    	$q->bindValue(':produit', $perso->produit());
    	$q->bindValue(':mat1', $perso->mat1());
    	$q->bindValue(':coutMat1', $perso->coutMat1());
    	$q->bindValue(':mat2', $perso->mat2());
    	$q->bindValue(':coutMat2', $perso->coutMat2());
    	$q->bindValue(':id', $perso->id());
     
        $q->execute(); 
    echo"1";
      }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je suis étonné qu'aucune erreur ne soit renvoyée, car la requête est syntaxiquement incorrecte (à moins d'une nouvelle entorse de MySQL au standard SQL ?).
    La syntaxe pour un INSERT est:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into MaTable(col1,col2,col3) values(1,2,3)
    Dans ton code tu mélanges la syntaxe de l'INSERT et celle de l'UPDATE:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update MaTable set col1=1,col2=2

    Tatayo

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    J'avoue ne pas avoir mis beaucoup de réflexion là dessus, j'ai toujours utilisé la structure employée dans un tutoriel en l'adaptant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?php
    class PersonnagesManager
    {
      private $_db; // Instance de PDO
     
      public function __construct($db)
      {
        $this->setDb($db);
      }
     
      public function add(Personnage $perso)
      {
        $q = $this->_db->prepare('INSERT INTO personnages(nom, forcePerso, degats, niveau, experience) VALUES(:nom, :forcePerso, :degats, :niveau, :experience)');
     
        $q->bindValue(':nom', $perso->nom());
        $q->bindValue(':forcePerso', $perso->forcePerso(), PDO::PARAM_INT);
        $q->bindValue(':degats', $perso->degats(), PDO::PARAM_INT);
        $q->bindValue(':niveau', $perso->niveau(), PDO::PARAM_INT);
        $q->bindValue(':experience', $perso->experience(), PDO::PARAM_INT);
     
        $q->execute();
      }
     
      public function delete(Personnage $perso)
      {
        $this->_db->exec('DELETE FROM personnages WHERE id = '.$perso->id());
      }
     
      public function get($id)
      {
        $id = (int) $id;
     
        $q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages WHERE id = '.$id);
        $donnees = $q->fetch(PDO::FETCH_ASSOC);
     
        return new Personnage($donnees);
      }
     
      public function getList()
      {
        $persos = [];
     
        $q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages ORDER BY nom');
     
        while ($donnees = $q->fetch(PDO::FETCH_ASSOC))
        {
          $persos[] = new Personnage($donnees);
        }
     
        return $persos;
      }
     
      public function update(Personnage $perso)
      {
        $q = $this->_db->prepare('UPDATE personnages SET forcePerso = :forcePerso, degats = :degats, niveau = :niveau, experience = :experience WHERE id = :id');
     
        $q->bindValue(':forcePerso', $perso->forcePerso(), PDO::PARAM_INT);
        $q->bindValue(':degats', $perso->degats(), PDO::PARAM_INT);
        $q->bindValue(':niveau', $perso->niveau(), PDO::PARAM_INT);
        $q->bindValue(':experience', $perso->experience(), PDO::PARAM_INT);
        $q->bindValue(':id', $perso->id(), PDO::PARAM_INT);
     
        $q->execute();
      }
     
      public function setDb(PDO $db)
      {
        $this->_db = $db;
      }
    }
    Elle m'a toujours bien servie.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ah oui maintenant que je vérifie sa formulation est comme de la tienne. Je vais réécrire mon code, merci.

    Reste à savoir pourquoi ma manière de faire a fonctionné si longtemps? (j'ignore à quel moment j'ai basculé dans le côté obscur de la force^^).
    Probablement ma vilaine habitude des copié/collé à la chaîne, la partie véreuse s'est propagée insensiblement à tout le reste du code.

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    Tout dépend ce que vous désirez faire avec votre requête.

    Si c'est une insertion, c'est-à-dire créer une ligne qui n'existe pas au préalable, alors vous devez bien utiliser un insert.
    --> https://dev.mysql.com/doc/refman/8.0/en/insert.html

    Si c'est une mise à jour, c'est-à-dire modifier une ligne déjà existante, alors vous devez utiliser un update.
    --> https://dev.mysql.com/doc/refman/5.5/en/update.html

    Si vous ne voulez pas trop vous poser la question si la ligne existe déjà ou pas, MySql sait très bien créer la ligne si elle n'existe pas ou bien la mettre à jour si elle existe déjà.
    Pour ce faire, vous devez utiliser un replace.
    --> https://dev.mysql.com/doc/refman/8.0/en/replace.html

    A cela on peut aussi ajouter le insert on duplicate key
    --> https://dev.mysql.com/doc/refman/8.0...duplicate.html

    Comme vous pouvez le constater, il existe plusieurs syntaxes possibles.
    MySql est assez souple en ce qui concerne la syntaxe, mais ce n'est pas une raison pour faire n'importe quoi.
    Ayez le réflexe de lire la documentation de mysql, en particulier le manuel de référence : https://dev.mysql.com/doc/refman/8.0/en/

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. Image.complete == true mais l'image n'est pas affichée
    Par prgasp77 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 02/11/2010, 08h23
  2. Réponses: 7
    Dernier message: 31/12/2009, 09h10
  3. Réponses: 9
    Dernier message: 17/09/2009, 22h57
  4. erreur d'execution 3704, ...:objet n'est pas ouvert
    Par cari dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 29/11/2005, 15h44
  5. erreur 1722 le serveur RPC n'est pas disponible
    Par StyleXP dans le forum Windows XP
    Réponses: 1
    Dernier message: 13/11/2005, 20h23

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