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 :

Modification de Table avec requête préparée et DOStatement::bindParam [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut Modification de Table avec requête préparée et DOStatement::bindParam
    Bonjour à toutes et à tous,
    je souhaite pouvoir modifier un enregistrement de ma table.
    pour faire un ajout, j'utilise le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    			// Utilisation d'une requête préparée
    			$update = $link->prepare('INSERT INTO '.$Table.' 
    			(TOUTE, UNE, LISTE, DE, CHAMPS)
    			VALUES(:TOUTE, :UNE, :LISTE, :DE, :CHAMPS)');
     
    			$update->bindParam('TOUTE', $Champ[1]); // PDOStatement::bindParam — Lie un paramètre à un nom de variable spécifique
    			$update->bindParam('UNE', $Champ[2]);
    			$update->bindParam('LISTE', $Champ[3]);
    			$update->bindParam('DE', $Champ[4]);
    			$update->bindParam('CHAMPS', $Champ[5]);
     
    			$update ->execute();
    			return($update->errorInfo());
    Pour modifier un ou plusieurs champs d'un enregistrement de cette table je fais mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $TabRslt = $bdd->query("SELECT * FROM  '.$Table.' ORDER BY TOUTE,LISTE");
    mais pour le renvoi des données je ne sais pas faire.
    J'ai vu dans la FAQ PHP de ce site (https://www.developpez.net/forums/d1...-bdd-page-web/) la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
               //Sinon c'est un mode édition = 1, qui est une modification d'image
                //On va chercher les données qui sont à modifier par une requête préparée
                $update = $bdd->prepare('UPDATE images SET image = ?, legende = ? WHERE id = ?');
                $update->execute(array($image, $legende, $edit_id));
    mais je ne sais pas comment mettre le SET dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    			// Utilisation d'une requête préparée
    			$update = $link->prepare('UPDATE '.$Table.' 
    			(TOUTE, UNE, LISTE, DE, CHAMPS)
    			VALUES(:TOUTE, :UNE, :LISTE, :DE, :CHAMPS) WHERE id='.$id);
     
    			$update->bindParam('TOUTE', $Champ[1]); // PDOStatement::bindParam — Lie un paramètre à un nom de variable spécifique
    			$update->bindParam('UNE', $Champ[2]);
    			$update->bindParam('LISTE', $Champ[3]);
    			$update->bindParam('DE', $Champ[4]);
    			$update->bindParam('CHAMPS', $Champ[5]);
     
    			$update ->execute();
    			return($update->errorInfo());
    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il suffit de suivre le modèle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $update = $link->prepare('UPDATE '.$Table.' 
    			SET TOUTE = :TOUTE, UNE = :UNE, LISTE = :LISTE, DE = :DE, COLONNES = :COLONNES
                           WHERE id = :ID');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Merci sabotage.
    Comme mon id est passée en paramètre d'appel de la fonction de ma requête j'ai modifié la fin de ton script ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $update = $link->prepare('UPDATE '.$Table.' 
    			SET TOUTE = :TOUTE, UNE = :UNE, LISTE = :LISTE, DE = :DE, COLONNES = :COLONNES
                           WHERE id = :'.$id);
    et j'ai l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in D:\monChemin\maRequete.php on line 245
    ligne 245 qui contientet si je ne met pas les 2 points WHERE id = '.$id); le code ne fonctionne pas (pas d'affichage d'erreur mais pas de mise à jour).
    Pour info, dans la liste SET je n'ai pas mis le champ ID car je ne veux pas le modifier, il est auto incrémenté. Dois-je le forcer tout de même?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Comme mon id est passée en paramètre d'appel de la fonction de ma requête
    ca n'empeche pas de le mettre en paramètre de la requête comme je l'avais fait.

    Dois-je le forcer tout de même?
    non.
    L'erreur indique que tu n'as pas le même nombre de paramètre en "bind" et dans la requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Citation Envoyé par sabotage Voir le message
    non.
    L'erreur indique que tu n'as pas le même nombre de paramètre en "bind" et dans la requête.
    En fait j'y suis arrivé mais uniquement en forçant le champ 'id'. Je suppose que le total (nombre de paramètre en "bind" et dans la requête) comprend le champ du WHERE.
    Merci sabotage

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Dans le code que tu nous montrais tu as un ":" qui se ballade :
    =>
    Mais comme je t'ai dis, autant utiliser un paramètre pour l'id aussi.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. [Php/MySql] Mélanger 2 tables dans une requète !
    Par skylman45 dans le forum Requêtes
    Réponses: 3
    Dernier message: 29/10/2007, 16h22
  2. [Php/MySQL] Envoi de mails selon requête
    Par martonpylon12 dans le forum Débuter
    Réponses: 7
    Dernier message: 28/03/2006, 14h00
  3. 3 tables avec requête complexe
    Par yamino dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/03/2004, 19h50

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