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 :

Message d'erreur sur une requête UPDATE qui fonctionne [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Message d'erreur sur une requête UPDATE qui fonctionne
    Bonjour,

    J'ai un petit soucis au niveau d'une requête UPDATE en MySQLi. Elle fonctionne parfaitement, mais il y a quand même un message d'erreur affiché. En le cachant avec un @, on y voit que du feu, mais bon c'est pas très pro comme solution ! x)

    Pour vous situer dans le contexte : je dois enregistrer les données d'un formulaire (une fiche élève), qui est remplie par des professeurs. Si la fiche n'existe pas, je la crée (pas de soucis à ce niveau là). Sinon, je la modifie.

    Voilà mon code pour la requête de modification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try {
    	$req = mysqli_prepare( $linkFE, "UPDATE fiche SET Resultats='$Resultats', CapTravail='$CapTravail', NivPhy='$NivPhy', NivTech='$NivTech', NivPsy='$NivPsy', CoMilieu='$CoMilieu', NbSeances='$NbSeances', NbAbs='$NbAbs', SynthCT='$SynthCT', NivGen='$NivGen', TravailClasse='$TravailClasse', TravailPerso='$TravailPerso', AbsRetards='$AbsRetards', Remarques='$Remarques', SynthPP='$SynthPP', SynthASS='$SynthASS', SynthEPS='$SynthEPS', SynthPA='$SynthPA', Symbole='$Symbole' WHERE NomPnom LIKE '$NomPnom' AND Trimestre LIKE '$Trimestre'" );
    	@mysqli_stmt_bind_param( $req, "sssssssssssssssssss", $Resultats, $CapTravail, $NivPhy, $NivTech, $NivPsy, $CoMilieu, $NbSeances, $NbAbs, $SynthCT, $NivGen, $TravailClasse, $TravailPerso, $AbsRetards, $Remarques, $SynthPP, $SynthASS, $SynthEPS, $SynthPA, $Symbole );
    	mysqli_stmt_execute($req);
    	$ok = "<p>Fiche enregistrée avec succès.</p>";
    } catch (Exception $e) {
    	$error = "<p class='error'>Erreur d'exécution. Impossible de modifier la fiche.</p>";
    }
    Et mon message d'erreur (quand j'enlève le @) :
    Warning: mysqli_stmt_bind_param() [<a href='function.mysqli-stmt-bind-param'>function.mysqli-stmt-bind-param</a>]: Number of variables doesn't match number of parameters in prepared statement in C:\wamp\www\SuiviSportifs\EnregistrerEleve.php on line 60
    La ligne 60, c'est celle avec "mysqli_stmt_bind_param(...)". Mais, je ne vois pas pourquoi il y a ce message d'erreur, puisque mon nombre de variables est correct... Il y a bien 19 variables à modifier, 19 "s", et 19 variables données en paramètre.

    Voilà, j'aimerais avoir une véritable solution à cela, au lieu de mon petit bidouillage.
    Si vous avez des idées sur la question, je vous en serais reconnaissante ^^

  2. #2
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Tu as oublié ce bout là dans ton binding :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE NomPnom LIKE '$NomPnom' AND Trimestre LIKE '$Trimestre'
    Quand est-ce que tu bind $NomPnom et $Trimestre ?
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Merci d'avoir répondu aussi rapidement !

    Tu veux dire que je devrais faire cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqli_stmt_bind_param( $req, "sssssssssssssssssssss", $NomPnom, $Trimestre, $Resultats, $CapTravail, $NivPhy, $NivTech, $NivPsy, $CoMilieu, $NbSeances, $NbAbs, $SynthCT, $NivGen, $TravailClasse, $TravailPerso, $AbsRetards, $Remarques, $SynthPP, $SynthASS, $SynthEPS, $SynthPA, $Symbole );
    21 "s", et 21 paramètres... J'avais essayé, mais ça me mettait exactement le même message d'erreur. A moins que je ne me trompe de syntaxe ?

    Les valeurs de $Trimestre et $NomPnom sont récupérées chacune sur une variable de session. Je ne pense pas que le problème puisse venir de là, mais sait-on jamais...

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonsoir,

    essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req = mysqli_prepare( $linkFE, "UPDATE fiche SET Resultats=?,CapTravail=?, NivPhy=?, NivTech=?, NivPsy=?, CoMilieu=?, NbSeances=?, NbAbs='?, SynthCT=?, NivGen=?, TravailClasse=?, TravailPerso=?, AbsRetards=?, Remarques=?, SynthPP=?, SynthASS=?, SynthEPS=?, SynthPA=?, Symbole=? WHERE NomPnom LIKE ? AND Trimestre LIKE ?" );
     
    mysqli_stmt_bind_param( $req, "sssssssssssssssssss", $Resultats, $CapTravail, $NivPhy, $NivTech, $NivPsy, $CoMilieu, $NbSeances, $NbAbs, $SynthCT, $NivGen, $TravailClasse, $TravailPerso, $AbsRetards, $Remarques, $SynthPP, $SynthASS, $SynthEPS, $SynthPA, $Symbole );
     
    mysqli_stmt_execute($req);
    le caractère "?" est utilisé comme étiquette quand tu fait un prepare(),

    quand tu fera ton bind_param mysqli remplacera les caractères "?" par la variable que tu lui a envoyée avec la fonction bind_param.

    Comme tu avait fait au départ Mysqli ne voyait aucune étiquette vue que tu utilisait directement le contenu des variables.

    Attention avec la fonction bind_param(), elle remplacera les étiquettes par les valeurs des variables reçus en paramètre dans l'ordre des paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into maTable values(?, ?, ?)
    ...bind_param("toto", "tata", "titi")
    //le premier "?" sera remplacé par toto, le deuxième par tata puis le troisième par titi
    le lien vers la doc de la fonction bind_param.
    une réponse vous a permis d'avancer ?

  5. #5
    Membre régulier Avatar de Zalawy
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 137
    Points : 99
    Points
    99
    Par défaut
    Vous pouvez essayer cela mais je ne sais pas que ça marche bien ou pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE NomPnom LIKE '$NomPnom'&Trimestre&'$Trimestre';

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Géniale ta réponse Exia, ça marche nickel ! Et j'ai compris au passage le fonctionnement de bind_param(), c'est juste parfait.

    Merci à tous les trois pour vos réponses, problème résolu. =)

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/01/2020, 09h34
  2. sqlite3, message d'erreur sur une requête qui fonctionne
    Par stefh7 dans le forum Général Python
    Réponses: 13
    Dernier message: 25/02/2011, 13h48
  3. [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
  4. [AC-2003] Message d'erreur sur une requête mise à jour
    Par souketou dans le forum VBA Access
    Réponses: 4
    Dernier message: 10/06/2009, 09h33
  5. Réponses: 8
    Dernier message: 01/03/2005, 16h01

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