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 :

Exécution d'une réquête sql sous php


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 15
    Points : 20
    Points
    20
    Par défaut Exécution d'une réquête sql sous php
    Bonjour,
    J'ai une réquete qui refusent de s'exécuter et j'arrive pas à déboguer. L'erreur qui s'affiche est la suivante :
    Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
    Voici mon 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
    public function updateSpeaker($email, Intervenant $int) {
              if ($this->readSpeaker($email)!=null) {
     
                $req= $this->bd->prepare("UPDATE intervenant SET biographie= :biographie WHERE email_user=".$email);
                $req->execute(array('biographie'=>$int->getBio())); 
     
                $req2= $this->bd->prepare("UPDATE users SET nom= :nom, prenom = :prenom, adresse = :adresse, regime_Alimentaire = :regime_Alimentaire, pays = :pays, allergies =: allergies, taille_vetement  =: taille_vetement, tel =: tel, organisation =: organisation WHERE email_user=".$email);
                //var_export($req2);
                      var_export($int);
                $req2->execute(array('nom'=>$int->getFirstName(), 'prenom'=>$int->getLastName(), "adresse"=>$int->getAdress(), 'regime_Alimentaire'=>$int->getDiet(), 'pays'=>$int->getCountry(), 'allergies'=>$int->getAllergy(), 'taille_vetement'=>$int->getClothingSize(), 'tel'=>$int->getTelNumber(), 'organisation'=>$int->getOrganization())); 
     
                return true;
              }
              return false;
            }
    La première réquete s'execute sans probleme. c'est la deuxieme qui ,ne marche pas.
    J'ai besoin d'aide

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,

    Pour éviter ce genre de déconvenue, il est préférable de se servir des tableaux en PHP, comme ça tu seras absolument certain de ne rien oublier au passage
    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
    public function updateSpeaker($email, Intervenant $int)
    {
        if ($this->readSpeaker($email) !== null) {
            $stmt = $this->bd->prepare('UPDATE intervenant SET biographie = :biographie WHERE email_user = :email');
            $stmt->execute([
                ':biographie' => $int->getBio(),
                ':email'      => $email
            ]);
     
            $fields = $data = [];
            $add_value = function($field, $value) use (&$fields, &$data) {
                $token        = ":{$field}";
                $fields[]     = "{$field} = {$token}";
                $data[$token] = $value;
            };
     
            $add_value('nom', $int->getFirstName());
            $add_value('prenom', $int->getLastName());
            $add_value('adresse', $int->getAdresse());
            $add_value('regime_Alimentaire', $int->getDiet());
            $add_value('pays', $int->getCountry());
            $add_value('allergies', $int->getAllergy());
            $add_value('taille_vetement', $int->getClothingSize());
            $add_value('tel', $int->getTelNumber());
            $add_value('organisation', $int->getOrganization());
     
            $sql = "UPDATE users SET ".implode(', ', $fields).' WHERE email_user = :email_user';
            $add_value('email_user', $email);
     
            $stmt = $this->bd->prepare($sql);
            $stmt->execute($data);
     
            return true;
        }
        return false;
    }
    Sers toi à fond du langage, PHP offre pléthore de syntaxes pour arriver à tes fins.
    Enfin quand dans la doc, il est indiqué que telle ou telle méthode renvoie un PDOStatement, il est préférable de le nommer $stmt au lieu de $req, n'importe qui en voyant $stmt saura immédiatement à quoi cela correspond.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 15
    Points : 20
    Points
    20
    Par défaut
    Merci pour la réponse.
    J'ai utilisé ta réquete mais elle renvoie false. ça n'affiche pas d'erreur mais son exécution renvoie false.

    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
     
     public function updateSpeaker($email, Intervenant $int) {
              if ($this->readSpeaker($email)!=null) {
     
              $req= $this->bd->prepare("UPDATE intervenant SET biographie= :biographie 
                                                            WHERE email_user=:email;");
     
              $data = array(':biographie'=>$int->getBio(), ':email' => $email);
     
     
     
           //var_export($this->speakersList());
            $req2= $this->bd->prepare("UPDATE users SET  nom= :nom,
                                                         prenom = :prenom, 
                                                         adresse = :adresse, 
                                                         regime_Alimentaire = :regime_Alimentaire,
                                                         pays = :pays, 
                                                         allergies = :allergies, 
                                                         taille_vetement  = :taille_vetement, 
                                                         tel = :tel, 
                                                         organisation = :organisation,
                                                         photo = :photo
                                                   WHERE email_user=:email;");
     
               $data1 = array(':nom'=>$int->getFirstName(), 
                              ':prenom'=>$int->getLastName(), 
                              ':adresse'=>$int->getAdress(), 
                              ':regime_Alimentaire'=>$int->getDiet(), 
                              ':pays'=>$int->getCountry(), 
                              ':allergies'=>$int->getAllergy(), 
                              ':taille_vetement'=>$int->getClothingSize(), 
                              ':tel'=>$int->getTelNumber(), 
                              ':photo' => $int->getPicture(),
                              ':organisation'=>$int->getOrganization(),
                              ':email' => $email
                            );
     
                $req2->execute($data1);
                //$req->execute($data);
     
                echo "<br>Dans EventStorage : ";
            var_export($this->readSpeaker($email));
            echo "<br>Objet Intervenant  dans EventStorage: <br>";
              var_export($int);
                return true;
              }
              return false;
            }
    Je vois pas d'où l'erreur vient.

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,

    faut que tu bosses aussi un peu de ton côté.
    si tu ramasses false, c'est que le premier test if ($this->readSpeaker($email)!=null) échoue, d'ailleurs j'avais repris ton code ainsi if ($this->readSpeaker($email) !== null), ce n'est pas pour rien. Ma version porte sur un test de type et de valeur, comme null l'est.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 15
    Points : 20
    Points
    20
    Par défaut
    Le false se trouve dans le bloc if. J’ai fait un var_export() sur $req2->execute($data2), le false était sur l’exécution de la requête . Mais c’est bon, j’ai repris le code à zéro et ça marche maintenant(bizarrement). J’avais sûrement jappé un petit truc de nommage ou un truc du genre.
    Merci pour ton aide

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

Discussions similaires

  1. [ODBC] Exécution d'une procédure Stockée sous PHP-odbc
    Par samybelarbi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/04/2014, 09h43
  2. Problème d'exécution d'une requête sql sous java
    Par leshafid dans le forum Requêtes
    Réponses: 1
    Dernier message: 18/08/2010, 09h15
  3. Problème d'exécution d'une requête sql sous java
    Par leshafid dans le forum JDBC
    Réponses: 1
    Dernier message: 18/08/2010, 08h26
  4. Exécution d'une procédure stockée sous sql server 2000
    Par amirad dans le forum Développement
    Réponses: 2
    Dernier message: 27/04/2009, 09h50
  5. Réponses: 1
    Dernier message: 13/12/2006, 14h18

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