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

  1. #1
    Membre à l'essai
    Inscrit en
    avril 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 19
    Points : 13
    Points
    13

    Par défaut Probléme de update sur une table qui n'a pas id auto_increment

    Bonjours chers amis,

    je viens de debuter avec Mkframework.

    mon application bug quand j'utilise le menu edit(update)
    je réussi avec mes tables qui ont un identifient en auto_increment. mais les table dont j'ai defini moi même l'identifient. pose problème dans la mise a jour quand même j'utilise le bulder.

    voici l'erreur

    -------------------------------------------------------------------------------------------------------------------
    PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
    #0 [internal function]: exception_error_handler(2, 'PDOStatement::e...', 'C:\\wamp\\www\\mkf...', 251, Array)
    #1 C:\wamp\www\mkframework\lib\framework\abstract\abstract_sgbd_pdo.php(251): PDOStatement->execute(Array)
    #2 C:\wamp\www\mkframework\lib\framework\abstract\abstract_sgbd_pdo.php(204): abstract_sgbd_pdo->query('UPDATE utilisat...', Array)
    #3 C:\wamp\www\mkframework\lib\framework\abstract\abstract_model.php(169): abstract_sgbd_pdo->update('utilisateur', Array, Array)
    #4 C:\wamp\www\mkframework\lib\framework\abstract\abstract_row.php(65): abstract_model->update(Object(row_utilisateur))
    #5 C:\wamp\www\mkframework\lib\framework\abstract\abstract_row.php(54): abstract_row->update()
    #6 C:\wamp\www\mkframework\data\genere\New_Passeport_project\model\model_utilisateur.php(141): abstract_row->save()
    #7 C:\wamp\www\mkframework\data\genere\New_Passeport_project\module\utilisateur\main.php(140): row_utilisateur->save()
    #8 C:\wamp\www\mkframework\data\genere\New_Passeport_project\module\utilisateur\main.php(66): module_utilisateur->processSave()
    #9 C:\wamp\www\mkframework\lib\framework\class_root.php(264): module_utilisateur->_edit()
    #10 C:\wamp\www\mkframework\data\genere\New_Passeport_project\public\index.php(47): _root->run()
    #11 {main}

    Detail:
    #0 exception_error_handler( , 'PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' , 'C:\wamp\www\mkframework\lib\framework\abstract\abstract_sgbd_pdo.php' , , Array ( [sReq] => UPDATE utilisateur SET `Login`=?,`Pwd`=?,`Nom`=?,`Prenoms`=?,`Tel`=?,`Email`=?,`nbFail`=?,`Date_creation`=?,`Code_pays`=?,`Groupe`=? WHERE Login=? [tParam] => Array ( [0] => 0 [1] => ae1c6bfd5c3839c765ab7c1bc00572167375e7bf [2] => EDJA [3] => OI EDJA JOSEPH [4] => 05 37 52 18 [5] => edjajoseph@yahoo.fr [6] => 0 [7] => 2017-11-15 [8] => CI [9] => Administrateur ) [tATTRERRMODE] => Array ( [SILENT] => 0 [WARNING] => 1 [EXCEPTION] => 2 ) [tATTRCASE] => Array ( [LOWER] => 2 [NATURAL] => 0 [UPPER] => 1 ) [sth] => PDOStatement Object ( [queryString] => UPDATE utilisateur SET `Login`=?,`Pwd`=?,`Nom`=?,`Prenoms`=?,`Tel`=?,`Email`=?,`nbFail`=?,`Date_creation`=?,`Code_pays`=?,`Groupe`=? WHERE Login=? ) ) )
    #1 C:\wamp\www\mkframework\lib\framework\abstract\abstract_sgbd_pdo.php (251)
    PDOStatement -> execute( Array ( [0] => 0 [1] => ae1c6bfd5c3839c765ab7c1bc00572167375e7bf [2] => EDJA [3] => OI EDJA JOSEPH [4] => 05 37 52 18 [5] => edjajoseph@yahoo.fr [6] => 0 [7] => 2017-11-15 [8] => CI [9] => Administrateur ) )
    #2 C:\wamp\www\mkframework\lib\framework\abstract\abstract_sgbd_pdo.php (204)
    abstract_sgbd_pdo -> query( 'UPDATE utilisateur SET `Login`=?,`Pwd`=?,`Nom`=?,`Prenoms`=?,`Tel`=?,`Email`=?,`nbFail`=?,`Date_creation`=?,`Code_pays`=?,`Groupe`=? WHERE Login=?' , Array ( [0] => 0 [1] => ae1c6bfd5c3839c765ab7c1bc00572167375e7bf [2] => EDJA [3] => OI EDJA JOSEPH [4] => 05 37 52 18 [5] => edjajoseph@yahoo.fr [6] => 0 [7] => 2017-11-15 [8] => CI [9] => Administrateur ) )
    #3 C:\wamp\www\mkframework\lib\framework\abstract\abstract_model.php (169)
    abstract_sgbd_pdo -> update( 'utilisateur' , Array ( [Login] => edja [Pwd] => ae1c6bfd5c3839c765ab7c1bc00572167375e7bf [Nom] => EDJA [Prenoms] => OI EDJA JOSEPH [Tel] => 05 37 52 18 [Email] => edjajoseph@yahoo.fr [nbFail] => 0 [Date_creation] => 2017-11-15 [Code_pays] => CI [Groupe] => Administrateur ) , Array ( [Login] => 0 ) )
    #4 C:\wamp\www\mkframework\lib\framework\abstract\abstract_row.php (65)
    abstract_model -> update( )
    #5 C:\wamp\www\mkframework\lib\framework\abstract\abstract_row.php (54)
    abstract_row -> update( )
    #6 C:\wamp\www\mkframework\data\genere\New_Passeport_project\model\model_utilisateur.php (141)
    abstract_row -> save( )
    #7 C:\wamp\www\mkframework\data\genere\New_Passeport_project\module\utilisateur\main.php (140)
    row_utilisateur -> save( )
    #8 C:\wamp\www\mkframework\data\genere\New_Passeport_project\module\utilisateur\main.php (66)
    module_utilisateur -> processSave( )
    #9 C:\wamp\www\mkframework\lib\framework\class_root.php (264)
    module_utilisateur -> _edit( )
    #10 C:\wamp\www\mkframework\data\genere\New_Passeport_project\public\index.php (47)
    _root -> run( )
    #11 {main}

    ---------------------------------------------------------------------------------------------------------------------------------------


    ------------STRUCTURE DE MA TABLE---------------------------------------------------------------
    CREATE TABLE IF NOT EXISTS `utilisateur` (
    `Login` varchar(8) NOT NULL,
    `Pwd` varchar(50) DEFAULT NULL,
    `Nom` varchar(25) DEFAULT NULL,
    `Prenoms` varchar(50) DEFAULT NULL,
    `Tel` varchar(25) DEFAULT NULL,
    `Email` varchar(25) DEFAULT NULL,
    `nbFail` int(11) DEFAULT NULL,
    `Date_creation` date DEFAULT NULL,
    `Code_pays` varchar(4) DEFAULT NULL,
    `Groupe` varchar(25) NOT NULL,
    PRIMARY KEY (`Login`),
    KEY `FK_UTILISATEUR_Code_pays` (`Code_pays`),
    KEY `GId` (`Groupe`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    ---------------------------------------------------------------------------------------------


    ----------------------MA FONCTION processSave DANS main------------
    private function processSave(){
    if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    return null;
    }

    $oPluginXsrf=new plugin_xsrf();
    if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
    return array('token'=>$oPluginXsrf->getMessage() );
    }

    $iId=_root::getParam('id',null);
    if($iId==null){
    $oUtilisateur=new row_utilisateur;
    }else{
    $oUtilisateur=model_utilisateur::getInstance()->findById( _root::getParam('id',null) );
    }

    $tColumn=array('Login','Pwd','Nom','Prenoms','Tel','Email','nbFail','Date_creation','Code_pays','Groupe');
    foreach($tColumn as $sColumn){
    $oUtilisateur->$sColumn=_root::getParam($sColumn,null) ;
    }


    if($oUtilisateur->save()){
    //une fois enregistre on redirige (vers la page liste)
    _root::redirect('utilisateur::list');
    }else{
    return $oUtilisateur->getListError();
    }

    }
    ------------------------------------------------------------------------------
    NB: Si j'enlève 'Login dans array(), pas de bug, mais pas de modif. Si je met 'Login', j'ai l'erreur ci-dessus


    En sommes, est il possible de faire udate sur une table qui n'a pas id auto_increment. si oui, comment?

    Merci d'avance pour votre attention

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    5 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 136
    Points : 19 211
    Points
    19 211
    Billets dans le blog
    17

    Par défaut

    Le problème semble etre que d'un coté vous faites un update du champ login et de l'autre vous le faite sur le critère egalement du login

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE utilisateur SET `Login`=?,`Pwd`=?,`Nom`=?,`Prenoms`=?,`Tel`=?,`Email`=?,`nbFail`=?,`Date_creation`=?,`Code_pays`=?,`Groupe`=? WHERE Login=? ) ) )
    donc en effet ça pose soucis sur le nombre de parametres,je pense que dans ce cas la, il faut passer par une méthode spécifique ou ajouter une clé primaire auto incremental en plus.
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/02/2016, 21h25
  2. [AC-2010] Problème lors d'un "UPDATE" sur une table
    Par Walric dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/04/2012, 21h33
  3. Problème d'update sur une table
    Par Melvine dans le forum PL/SQL
    Réponses: 4
    Dernier message: 29/02/2012, 17h54
  4. Réponses: 9
    Dernier message: 13/03/2010, 11h38
  5. probléme de cadre sur une image qui me sert de lien
    Par thomas_chamas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/11/2004, 18h36

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