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 :

update fonctionne mais pas insert


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 6
    Points
    6
    Par défaut update fonctionne mais pas insert
    Bonjour, j'ai ce code mais il n'y a que le update qui fonctionne et non le insert qui me retourne un false lorsque c'est une nouvelle adresse:

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    public function save(DDPC\Adresse $contact) {
    		$data = [
    				':numero_voie' => $contact->numero_voie,
    				':type_voie' => $contact->type_voie,
    				':voie' => $contact->voie,
    				':complement_adresse_1' => $contact->complement_adresse_1,
    				':complement_adresse_2' => $contact->complement_adresse_2,
    				':service_distribution' => $contact->service_distribution,
    				':adresse_internationale' => $contact->adresse_internationale,
    				':code_postal' => $contact->code_postal,
    				':ville_postal' => $contact->ville_postal,
    				':cedex' => $contact->cedex,
    				':pays' => $contact->pays,
    				':longitude' => $contact->longitude,
    				':latitude' => $contact->latitude,
    				':id_commune' => $contact->id_commune
    		];
     
    		if ($contact->id_adresse === null) {
    			$query =  "
    				INSERT INTO
    					adresse
    				SET
    					adresse.numero_voie = :numero_voie,
    					adresse.type_voie = :type_voie,
    					adresse.voie = :voie,
    					adresse.complement_adresse_1 = :complement_adresse_1,
    					adresse.complement_adresse_2 = :complement_adresse_2,
    					adresse.service_distribution = :service_distribution,
    					adresse.adresse_internationale = :adresse_internationale,
    					adresse.code_postal = :code_postal,
    					adresse.ville_postal = :ville_postal,
    					adresse.cedex = :cedex,
    					adresse.pays = :pays,
    					adresse.longitude = :longitude,
    					adresse.latitude = :latitude,
    					adresse.id_commune = :id_commune
     
    			";
     
    			$stmt = $this->dbh->prepare ($query);
    // 				exit(var_dump( $stmt, $data ));
    			if ($stmt->execute ( $data ))
    			{
    				return $this->dbh->lastInsertId ();	
    			}
    		} 
    		else 
    		{
    			$data [':id_adresse'] = $contact->id_adresse;
     
    			$stmt = $this->dbh->prepare ( "
    				UPDATE
    					adresse
    				SET
    					adresse.numero_voie = :numero_voie,
    					adresse.type_voie = :type_voie,
    					adresse.voie = :voie,
    					adresse.complement_adresse_1 = :complement_adresse_1,
    					adresse.complement_adresse_2 = :complement_adresse_2,
    					adresse.service_distribution = :service_distribution,
    					adresse.adresse_internationale = :adresse_internationale,
    					adresse.code_postal = :code_postal,
    					adresse.ville_postal = :ville_postal,
    					adresse.cedex = :cedex,
    					adresse.pays = :pays,
    					adresse.longitude = :longitude,
    					adresse.latitude = :latitude,
    					adresse.id_commune = :id_commune
     
    				WHERE
    					adresse.id_adresse = :id_adresse
    			" );
     
    			if ($stmt->execute ( $data ))
    				return $contact->id_adresse;
    		}
    		return false;
    	}
    En fait, le but c'est que si mon contact a déjà une adresse on récupère son id_adresse et on effectue les modifications, dans le cas contraire, on lui ajoute une adresse.

    J'ai effectué un var_dump de $data et il prend bien en compte les champs remplis, le problème vient vraiment de mon execute() puisqu'il ne veut pas s'exécuter.

    Merci de m'aider, je peine, ça fait deux jours, sur le même problème.

  2. #2
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Soit votre problème vient des requêtes qui sont mauvaises, soit cela vient de PHP.

    Première chose à faire :
    les requêtes données fonctionnent-elles? L'insertion est-il possible? Si non, alors il faut chercher et trouver l'erreur de syntaxe ou autre et avoir au final une requête qui fonctionne.

    Si elles fonctionnent, alors c'est le php qui ne va pas, et je vous conseille de poster votre question sur un forum php.

    Pierre

  3. #3
    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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut lahot22.

    La syntaxe de votre insert n'est pas correcte :
    --> http://dev.mysql.com/doc/refman/5.7/en/insert.html
    Il manque la liste des colonnes !

    A tout hasard, je vous donne aussi la syntaxe du update :
    --> http://dev.mysql.com/doc/refman/5.7/en/update.html

    D'après ce que j'ai compris de votre bout de code, vous testez "$contact->id_adresse.
    Si l'identifiant de l'adresse est null, vous faites un insert, sinon vous faites un update.

    Sous MySql, il n'est pas nécessaire de faire cette distinction.
    Autrement dit, il existe une requête qui permet de faire à la fois un insert si la ligne n'existe pas ou un update si la ligne existe déjà.
    Il s'agit du replace qui se gère soit comme un insert ou soit comme un update selon votre convenance :
    --> http://dev.mysql.com/doc/refman/5.7/en/replace.html

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

  4. #4
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Sous MySql, il n'est pas nécessaire de faire cette distinction.
    Autrement dit, il existe une requête qui permet de faire à la fois un insert si la ligne n'existe pas ou un update si la ligne existe déjà.
    Si c'est propre à MySQL, il faut peut-être éviter, car le portage sur un autre SGBD sera problèmatique.

    Pierre

  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 380
    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 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut pier.antoine.

    Sous le nom de "replace", je veux bien que cela existe que sous MySql.

    Citation Envoyé par pier.antoine
    ... le portage sur un autre SGBD sera problèmatique.
    Je n'ai jamais vu une application développée pour tel SGBD, être opérationnelle sans faire de réadaptation.
    Les SGBD sont des conceptions propriétaires, et ils sont en compétitions entre eux.
    Tu ne vas tout de même pas croire qu'un SGBD va facilité la migration, soit vers elle, soit vers un concurrent.

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

Discussions similaires

  1. SELECT qui fonctionne mais pas UPDATE
    Par Kentin64 dans le forum Requêtes
    Réponses: 7
    Dernier message: 22/08/2011, 12h04
  2. [UBUNTU] La gravure fonctionne mais pas le démarrage
    Par khaskhos dans le forum Ubuntu
    Réponses: 12
    Dernier message: 18/01/2007, 15h37
  3. Flash - aperçu fonctionne mais pas swf seul
    Par LeBernie dans le forum Flash
    Réponses: 11
    Dernier message: 17/11/2006, 17h06
  4. [FLASH 8] : FLA qui fonctionne mais pas le SWF
    Par xtaze dans le forum Flash
    Réponses: 9
    Dernier message: 24/10/2006, 09h14
  5. [Conception] INSERT fonctionne a moitié, UPDATE Fonctionne, comprends pas?
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 06/09/2006, 17h22

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