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 :

Erreur de syntaxe: update set where


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2010
    Messages : 40
    Points : 40
    Points
    40
    Par défaut Erreur de syntaxe: update set where
    salut tous le monde,
    L’erreur m’a perdu beaucoup de temps , svp Aide-moi pour le corriger
    voila l'erreur

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'WHERE id ='3'' à la ligne 5' in F:\Program Files\EasyPHP-5.3.3\www\1er-example\forum\class_UserTable.php:25 Stack trace: #0 F:\Program Files\EasyPHP-5.3.3\www\1er-example\forum\class_UserTable.php(25): PDOStatement->execute(Array) #1 F:\Program Files\EasyPHP-5.3.3\www\1er-example\forum\main.php(9): UserTable->update('adel', 'g', 3) #2 {main} thrown in F:\Program Files\EasyPHP-5.3.3\www\1er-example\forum\class_UserTable.php on line 25
    table étuliser etudiant (nom,sex ,id)

    contenu de fichier "class_UserTable.php"
    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
    <?php
    class UserTable
    {
     
            private $update;
     
     
          public function __construct($db)
          {
     
                $this->update = $db->prepare(
                "UPDATE etudiant 
                SET 
                    nom = :nom,
                    sex = :sex,
                WHERE id =:id");
     
     
          } 
     
     
           public function update($nom, $sex, $id)
          {
                            $this->update->execute( 
    /*ligne 25*/        array(':nom' => $nom,':sex'=>$sex,'id'=> $id));/*ligne 25*/
                            return $this->update->rowCount();
          }
     
    }
    contenu de fichier "class_MyPDO.php"
    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
    <?php
    class MyPDO extends PDO
    {
          public function __construct($dsn, $user=NULL, $password=NULL)
          {
                parent::__construct($dsn, $user, $password);
                $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          }
          public function prepare($sql, $options=NULL)
          {
                $statement = parent::prepare($sql);
                if(strpos(strtoupper($sql), 'SELECT') === 0) //requête "SELECT"
                {
                      $statement->setFetchMode(PDO::FETCH_ASSOC);
                }
                return $statement;
          }
    }
    ?>
    contenu de fichier "main.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
    require_once 'class_UserTable.php';
    require_once 'class_MyPDO.php';
     
    $db = new MyPDO('mysql:host=localhost;dbname=all', 'root', '');  
     
                   $userTable = new UserTable($db);
     
    /*ligne 9*/echo"le nombre de lignes modifier=".$userTable->update('adel','g',3);
    ?>

  2. #2
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    dans ta requete set :
    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
    <?php
    class UserTable
    {
     
            private $update;
     
     
          public function __construct($db)
          {
     
                $this->update = $db->prepare(
                "UPDATE etudiant 
                SET 
                    nom = :nom,
                    sex = :sex //tu avais une virgule ici
                WHERE id =:id");
     
     
          } 
     
     
           public function update($nom, $sex, $id)
          {
                            $this->update->execute( 
    /*ligne 25*/        array(':nom' => $nom,':sex'=>$sex,'id'=> $id));/*ligne 25*/
                            return $this->update->rowCount();
          }
     
    }
    enlèves la virgule après ":sex"

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Egalement quand tu passes tes valeurs de le "execute", il manque les ':' devant 'id'...

  4. #4
    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 pc.bertineau Voir le message
    Egalement quand tu passes tes valeurs de le "execute", il manque les ':' devant 'id'...
    c'est pas obligatoire ça, c'est même le but premier de ce genre de requete préparée

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2010
    Messages : 40
    Points : 40
    Points
    40
    Par défaut merci
    Oui c'est la virgule
    stealth35
    vorace
    merci beaucoup

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    c'est pas obligatoire ça, c'est même le but premier de ce genre de requete préparée
    Je te crois sur parole stealth35 mais je comprends pas... PDO ne binde pas en fonction des clés du tableau passé en paramètre ?
    Et "sur le but de ce genre de requête" je vois encore moins

  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
    Citation Envoyé par pc.bertineau Voir le message
    Je te crois sur parole stealth35 mais je comprends pas... PDO ne binde pas en fonction des clés du tableau passé en paramètre ?
    Et "sur le but de ce genre de requête" je vois encore moins
    si mais c'est parce que c'est :id que la clé est :id,
    ce type de requête n'existe pas vraiment, une requête préparée c'est avec les "?", les clients introduisent les :param pour faciliter l'interaction avec les object/array.

  8. #8
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Fais une requete toute simple par commencé.

    Ensuite si sa marche, tu rajoutes des choses, c'est le meilleur moyen de debugger je pense

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/02/2009, 18h39
  2. [access 2003] erreur d syntaxe update
    Par Milyshyn76 dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/01/2008, 05h51
  3. Erreur de syntaxe dans clause where
    Par tomguiss dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/11/2007, 22h39
  4. [2K5]Syntaxe Update Set From Join Group by
    Par Monstros Velu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/10/2007, 10h57
  5. [INTERBASE][UPDATE SET WHERE] problème de requete
    Par exclusif dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/03/2006, 21h10

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