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 :

[PDO] Requête qui n'update pas le champ [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 92
    Points : 116
    Points
    116
    Par défaut [PDO] Requête qui n'update pas le champ
    Salut à tous,

    Le problème est bien simple, j'ai une requête aussi basique qu'explicite qui, pour une raison que j'ignore encore, ne met pas le champ à jour.

    La voilà:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = "UPDATE users "; // create mysql update query
    $sql .= "SET password = :password ";
    $sql .= "WHERE email = :email ";
    $sql .= "LIMIT 1";
    $stmt = $dbh->prepare($sql);
    $stmt->bindParam(":password",$encrypted);
    $stmt->bindParam(":email",$email);
    $count = $stmt->execute();

    J'ai essayé la manière fondamentale avec password = ? et email = ? mais ça ne fonctionne pas mieux

    Le count retourne pourtant "true" et aucun warning ou erreur à signaler... C'est juste que dans la base, le champ password ne se met pas à jour...

    Une idée?

    Merci d'avance
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class certified{
       private $CV;
       public function __construct($CV){
          $this->CV="W3 Excellence";   
       }
       public function certification(){
          echo $this->CV . " Javascript, PHP, CSS, MySQL";
       }
    }
    $wenijah = new certified();

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    la gestion des erreurs est activée ?
    http://php.net/manual/fr/pdo.error-handling.php

  3. #3
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    si tu m'avais dit "ORACLE" je t'aurais répondu: C O M M I T.

    mais vu que tu précises pas quelle couche d'accès à la bd tu utilises...

    essaie avec les paramètres en dur.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Merci pour vos réponses!

    Citation Envoyé par stealth35 Voir le message
    la gestion des erreurs est activée ?
    http://php.net/manual/fr/pdo.error-handling.php
    Malheureusement oui :/ et RAS

    Citation Envoyé par gene69 Voir le message
    si tu m'avais dit "ORACLE" je t'aurais répondu: C O M M I T.

    mais vu que tu précises pas quelle couche d'accès à la bd tu utilises...

    essaie avec les paramètres en dur.
    En raw...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sql = "UPDATE users "; // create mysql update query
    $sql .= "SET password = $encrypted ";
    $sql .= "WHERE email = $email ";
    $sql .= "LIMIT 1";
    /*
    $stmt = $dbh->prepare($sql);
    $stmt->bindParam(":password",$encrypted);
    $stmt->bindParam(":email",$email);
    */
    $count = $dbh->query($sql);

    ...ça fonctionne mais c'est pas beau euh euh

    Entre temps, je me suis rendu compte que $encrypted n'était pas mis entre apostrophes mais maintenant oui et le problème persiste.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class certified{
       private $CV;
       public function __construct($CV){
          $this->CV="W3 Excellence";   
       }
       public function certification(){
          echo $this->CV . " Javascript, PHP, CSS, MySQL";
       }
    }
    $wenijah = new certified();

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est exec ou $count = $stmt->rowCount();

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    c'est exec ou $count = $stmt->rowCount();
    Comment ça?

    J'ai testé du select et c'est la même chose, ça passe en dur mais pas en bind, une idée pourquoi?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class certified{
       private $CV;
       public function __construct($CV){
          $this->CV="W3 Excellence";   
       }
       public function certification(){
          echo $this->CV . " Javascript, PHP, CSS, MySQL";
       }
    }
    $wenijah = new certified();

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    execute renvoie que true ou false ...
    il faut faire rowCount pour savoir le nombre de lignes changées

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    execute renvoie que true ou false ...
    il faut faire rowCount pour savoir le nombre de lignes changées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    			$sql = "UPDATE users "; // create mysql update query
    			$sql .= "SET password = :password ";
    			$sql .= "WHERE email = :email ";
    			$sql .= "LIMIT 1";
    		    $stmt = $dbh->prepare($sql);
    			$stmt->bindParam(":password",$encrypted);
    			$stmt->bindParam(":email",$email);
    			$stmt->execute();
    			$count = $stmt->rowCount();
    			echo $count;
    			die();
    Donne effectivement zéro.

    Par contre, la requête avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $count = $stmt->execute();
    renvoie 1 si, si!
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class certified{
       private $CV;
       public function __construct($CV){
          $this->CV="W3 Excellence";   
       }
       public function certification(){
          echo $this->CV . " Javascript, PHP, CSS, MySQL";
       }
    }
    $wenijah = new certified();

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par wenijah Voir le message
    Par contre, la requête avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $count = $stmt->execute();
    renvoie 1 si, si!
    true = '1'
    false = ''

    fait un var_dump et tu comprendras

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    true = '1'
    false = ''

    fait un var_dump et tu comprendras
    Ah oui!

    Donc j'ai true avec le execute mais 0 sur le rowCount :/
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class certified{
       private $CV;
       public function __construct($CV){
          $this->CV="W3 Excellence";   
       }
       public function certification(){
          echo $this->CV . " Javascript, PHP, CSS, MySQL";
       }
    }
    $wenijah = new certified();

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par wenijah Voir le message
    Ah oui!

    Donc j'ai true avec le execute mais 0 sur le rowCount :/
    c'est qu'aucune ligne n'as été changé

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Mwarf... Le problème était ailleurs... Comme pour toute requête "normale", j'utilisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $username = $dbh->quote($_POST["username"]);
    Le bindParam semble quot'er tout seul donc le code ci-dessous est inutile.

    Merci à steatlh et gene pour m'avoir orienté ^^
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class certified{
       private $CV;
       public function __construct($CV){
          $this->CV="W3 Excellence";   
       }
       public function certification(){
          echo $this->CV . " Javascript, PHP, CSS, MySQL";
       }
    }
    $wenijah = new certified();

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

Discussions similaires

  1. [MySQL] Une requête update qui ne renvoie pas d'erreur mais qui n'update pas
    Par Marc22 dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 16/06/2010, 17h59
  2. [MySQL] un update qui ne met pas les champs à jour
    Par naazih dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/05/2008, 21h44
  3. [php-mysql] requête qui ne marche pas....
    Par sanosuke85 dans le forum Requêtes
    Réponses: 1
    Dernier message: 09/01/2006, 17h18
  4. Une requête qui ne reconnait pas is not null
    Par LeBauw dans le forum Access
    Réponses: 2
    Dernier message: 08/09/2005, 12h29
  5. Requête qui ne passe pas
    Par TheBart dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/08/2005, 10h12

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