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 :

Update en PDO : Invalid parameter number: mixed named and positional parameters' [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut Update en PDO : Invalid parameter number: mixed named and positional parameters'
    Bonjour

    Aidez-moi Svp !
    Je cherche à mettre à jour deux tables depuis mon formulaire mais cette erreur que je ne comprends pas, la valeur de l'id dans les requêtes vient d'un autre fichier :
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters' in /homepages/0/d513201601/htdocs/Facturation_generale/updateFacture.php:52Stack trace:#0 /homepages/0/d513201601/htdocs/Facturation_generale/updateFacture.php(52): PDOStatement->execute()#1 {main} thrown in /homepages/0/d513201601/htdocs/Facturation_generale/updateFacture.php on line 52
    Et la ligne 52 est celle-ci : 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
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php      require_once 'connexion.php';
          session_start();
        if (isset($_SESSION['id_membre']) AND isset($_SESSION['pseudo'])){
     
     
          //On vérifie si la variable existe et sinon elle vaut NULL
          $num = isset($_POST['num']) ? $_POST['num'] : NULL;
          $client = isset($_POST['client']) ? $_POST['client'] : NULL;
          $designation = isset($_POST['designation']) ? $_POST['designation'] : NULL;
          $quantite = isset($_POST['quantite']) ? $_POST['quantite'] : NULL;
          $prixht = isset($_POST['prixht']) ? $_POST['prixht'] : NULL;
          $datefacture = isset($_POST['datefacture']) ? $_POST['datefacture'] : NULL;
          $facturede = isset($_POST['facturede']) ? $_POST['facturede'] : NULL;
          $conditions = isset($_POST['conditions']) ? $_POST['conditions'] : NULL;
          $numtva = isset($_POST['numtva']) ? $_POST['numtva'] : NULL;
          $id_membre= $_SESSION['id_membre'];
     
     
          $req1 = $base->prepare('UPDATE infosfacture
            SET num = :num,
            numtva = :numtva,
            client = :client,
            datefacture = :datefacture,
            facturede = :facturede,
            conditions = :conditions,
            id_membre= :id_membre
            WHERE id= :?');
            $req1->bindParam(':num', $_POST['num'], PDO::PARAM_STR);
            $req1->bindParam(':numtva', $_POST['numtva'], PDO::PARAM_STR);
            $req1->bindParam(':client', $_POST['client'], PDO::PARAM_STR);
            $req1->bindParam(':datefacture', $_POST['datefacture'], PDO::PARAM_STR);
            $req1->bindParam(':facturede', $_POST['facturede'], PDO::PARAM_STR);
            $req1->bindParam(':conditions', $_POST['conditions'], PDO::PARAM_STR);
            $req1->bindParam(':id_membre', $_SESSION['id_membre'], PDO::PARAM_INT);
            $req1->execute();
     
     
            $req2 = $base->prepare('UPDATE facturation
                                    SET  designation = :designation,
                                    quantite = :quantite,
                                    prixht = :prixht
                                    WHERE fk_facturation_id= ?');
            $req2->bindParam(':designation', $_POST['designation'], PDO::PARAM_STR);
            $req2->bindParam(':quantite', $_POST['quantite'], PDO::PARAM_STR);
            $req2->bindParam(':prixht', $_POST['prixht'], PDO::PARAM_STR);
            $req2->execute();
     
     
        echo 'La facture n° '.$num.' a bien été mise à jour ';
     
          <?
          }
          else {
            echo 'Vous n\'êtes pas connecté.';
          }
     
          ?>
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu nous a fait corriger * ton code d'INSERT, maintenant c'est celui d'UPDATE ???
    * Je devrais plutôt dire : "ré-écrire entièrement" !

    Tu as DEJA eu la MEME erreur !

    Tu ne fais pas beaucoup d'efforts....


    Indice : ligne 27.

  3. #3
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut
    J'ai modifié mon code mais je cherche comment récupérer l'id de la première requête $req1 :
    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
    $req1 = $base->prepare('UPDATE infosfacture        SET num = :num,
            numtva = :numtva,
            client = :client,
            datefacture = :datefacture,
            facturede = :facturede,
            conditions = :conditions,
            id_membre= :id_membre
            WHERE id= :id');
     
     
            $req2 = $base->prepare('UPDATE facturation
                                    SET  designation = :designation,
                                    quantite = :quantite,
                                    prixht = :prixht
                                    WHERE fk_facturation_id=:fk_facturation_id');
     
     
            $param = array();
            $params[':num']    = $_POST['num'];
            $params[':numtva']    = $_POST['numtva'];
            $params[':client']    = $_POST['client'];
            $params[':datefacture'] = $_POST['datefacture'];
            $params[':facturede'] = $_POST['facturede'];
            $params[':conditions'] = $_POST['conditions'];
            $params[':id_membre'] = $id_membre;
            $req1->execute($params)
     
     
            //$fk_facturation_id = $base->query('SELECT facturation.fk_facturation_id FROM facturation INNER JOIN infosfacture WHERE facturation.fk_facturation_id=infosfacture.id ')
     
     
     
     
          $params = array();
          //$params[':fk_facturation_id'] = $fk_facturation_id;
     
     
          foreach ($_POST['designation'] as $key => $designation) {
                $params[':designation'] = $designation;
                $params[':quantite']    = $_POST['quantite'][$key];
                $params[':prixht']  = $_POST['prixht'][$key];
                $params[':taxe'] = $_POST['taxe'][$key];
                $req2->execute($params);
            }

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pour en arriver à modifier une facture, il a bien fallu un lien ou un formulaire contenant l'id de la facture, non ?

    Explique-nous un peu....

  5. #5
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut
    Je cherche depuis là et je ne trouve pas la solution, j'airelu la doc PDO.

    J'ai cette erreur :
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in /homepages/0/d513201601/htdocs/Facturation_generale/updateFacture.php:81Stack trace:#0 /homepages/0/d513201601/htdocs/Facturation_generale/updateFacture.php(81): PDOStatement->execute(Array)#1 {main} thrown in /homepages/0/d513201601/htdocs/Facturation_generale/updateFacture.php on line 81
    Voici la ligne 81: $req2->execute($params);
    Il ne reconnait pas la variable $params qui est pourtant déclaré. Aidez-moi Svp !

    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
    $req1 = $base->prepare('UPDATE infosfacture        SET num = :num,
            numtva = :numtva,
            client = :client,
            datefacture = :datefacture,
            facturede = :facturede,
            conditions = :conditions,
            id_membre= :id_membre
            WHERE id= :id');
            $req1->bindParam(':id', $_GET['id'], PDO::PARAM_INT);
            $req1->bindParam(':num', $_POST['num'], PDO::PARAM_STR);
            $req1->bindParam(':numtva', $_POST['numtva'], PDO::PARAM_STR);
            $req1->bindParam(':client', $_POST['client'], PDO::PARAM_STR);
            $req1->bindParam(':datefacture', $_POST['datefacture'], PDO::PARAM_STR);
            $req1->bindParam(':facturede', $_POST['facturede'], PDO::PARAM_STR);
            $req1->bindParam(':conditions', $_POST['conditions'], PDO::PARAM_STR);
            $req1->bindParam(':id_membre', $_SESSION['id_membre'], PDO::PARAM_INT);
            $req1->execute();
     
     
     
     
     
     
            $req2 = $base->prepare('UPDATE facturation
                                    SET  designation = ?,
                                    quantite = ?,
                                    prixht = ?,
                                    taxe = ?,
                                    WHERE fk_facturation_id= ?');
          $params = array();
          foreach ($_POST['designation'] as $key => $designation) {
                $params[':designation'] = $designation;
                $params[':quantite']    = $_POST['quantite'][$key];
                $params[':prixht']  = $_POST['prixht'][$key];
                $params[':taxe'] = $_POST['taxe'][$key];
                $params[':fk_facturation_id'] = $_GET['id'];
                $req2->execute($params);
            }

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il faut VRAIMENT apprendre à comprendre les messages d'erreur !!!

    Invalid parameter number: parameter was not defined'
    Nombre de paramètres invalide. Un (ou plusieurs) paramètres sont indéfinis.

    En clair :
    Certains paramètres définis dans la requête ne le sont pas dans les paramètres transmis (via les bindParam ou l'array $params, c'est selon...*)
    ...
    * Pourquoi tu utilises tantôt l'une, tantôt l'autre syntaxe : mystère et boule de gomme....

    Et là,.... cerise sur le cageot, tu mets des ? au lieu de "place holders" nommés ...

    Bref : tu fais du gloubigoulba....

    Ça manque cruellement de RIGUEUR !!
    Dernière modification par Invité ; 17/04/2018 à 00h28.

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

Discussions similaires

  1. [MySQL] erreur Invalid parameter number: mixed named and positional parameters
    Par rvm31 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/11/2015, 10h56
  2. [PDO] ERREUR PDO : Invalid parameter number
    Par laurentSc dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 15/12/2013, 19h57
  3. [PDO] Invalid parameter number
    Par Kel-T dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/07/2010, 14h12
  4. Réponses: 6
    Dernier message: 03/06/2010, 10h09
  5. Réponses: 3
    Dernier message: 25/08/2009, 23h25

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