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 sur lastInsertId [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 56
    Par défaut UPDATE sur lastInsertId
    Bonjour,

    le contexte: je récupère les variables d'un formulaire, je les charge dans la bdd avec un new PDO INSERT (tout va bien) puis je traite les variables dans différentes fonctions de calcul (require FonctionsCalcul.php): ok les variables sont correctement traitées.
    Le but est d'avoir dans la table sur une même ligne (un même n° ID) les variables du formulaire et leurs résultats via les fonctions.

    le problème: je n'arrive pas à compléter les champs de résultats.

    dans la page formulaire mon new PDO s'achève sur un $lastID=$bdd->lastInsertId(); tout va bien je récupère bien le dernier n° d'enregistrement (clé primaire autoincrémentée)

    dans chaque fonction, avant le return, je fais un nouveau new PDO pour remplir les champs devant recevoir les résultats (champs "differentie"l et "proportion" qui n'ont pas été INSERT et qui sont null par défaut):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $updateBDD=$bdd->prepare('UPDATE table SET differentiel=:differentiel,proportion=:proportion WHERE ID=:ID');
    $result=$updateBDD->execute(array(
       'differentiel'=>$differentiel,
       'proportion'=>$proportion,
       'ID'=>$lastID,
    ));
    cela ne fonctionne pas:
    echo $updateBDD->errorCode(); retourne 42S22
    echo $updateBDD->errorInfo(); retourne Notice:Array to string conversion in ...FonctionsCalcul.php line(ligne echo $updateBDD->errorInfo();
    puis sous la notice: Array

    merci pour votre aide !!!!!

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       ':differentiel'=>$differentiel,
       ':proportion'=>$proportion,
       ':ID'=>$lastID,
    Sinon, merci de nous montrer les messages d'erreur COMPLETS, et pas "bricolés".

    Et suffisamment de code, pas juste "un bout choisi"...

  3. #3
    Membre averti
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 56
    Par défaut
    Bonjour,
    l'ajout des : devant les champs n'améliore hélas pas la situation. le PDO UPDATE complet dans la fonction de calcul de FonctionsCalcul.php, avec les : est

    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
    				$bdd=new PDO('mysql:host=127.0.0.1;dbname=maBDD;charset=utf8','root','');
    				$updateBDD=$bdd->prepare('UPDATE table SET differentiel=:differentiel,proportion=:proportion WHERE ID=:ID');
    				$result=$updateBDD->execute(array(
    				':differentiel'=>$differentiel,
    				':proportion'=>$proportion,
    				':ID'=>$lastID,
    				));
    				if(!$result){
    					echo $updateBDD->errorCode();
    					echo '<p> lastID du PDO UPDATE = '.$lastID.' </p>';
    					echo $updateBDD->errorInfo();
    				}
    				if($bdd){
    					$bdd=NULL;
    				}
    ce code retourne dans le navigateur:

    42S22
    lastID de UPDATE = 125


    ( ! ) Notice: Array to string conversion in C:\wamp64\www\Fonctions\FonctionsCalcul v 1.1.php on line 117
    Call Stack
    # Time Memory Function Location
    1 0.0010 390304 {main}( ) ...\Formulaire1_1.php:0
    2 0.0340 518032 CalculPrimaire( ) ...\Formulaire1_1.php:95
    Array
    la ligne 117 est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    				echo $updateBDD->errorInfo();
    ce PDO UPDATE est juste avant le return de la fonction CalculPrimaire écrite dans la page Fonctionscalcul v1.1.php qui a notamment comme argument $lastID.

    le $lastID est récupéré dans la page formulaire Formulaire1_1, juste après le new PDO INSERT qui fonctionne bien, par le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    				$lastID=$bdd->lastInsertId();
    				echo '<p> lastID récupéré après le PDO INSERT = '.$lastID.' </p>';
    				if($bdd){
    					$bdd=NULL;
    				}
    ce qui affiche dans le navigateur:
    lastID récupéré après le PDO INSERT = 125

    le $lastID (en l'occurence 125) est bien passé en argument de CalculPrimaire dans Fonctionscalcul...
    je ne sais pas où chercher l'erreur...

  4. #4
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Salut jean simon,
    le message est très confus pour moi.
    les : sont facultatifs dans execute/bindValue/bindParam, errorInfo() va renvoyer un tableau d'où l'erreur "Array to String Conversion" . Au lieu de echo, faites un var_dump($updateBDD->errorInfo()); .

    Voici ce que dit le code d'erreur 42S22 https://www.google.com/search?q=42S2...hrome&ie=UTF-8

    La gestion d'erreurs avec PDO doit se faire avec PDO::ATTR_ERRMODE + PDO::ATTR_EXCEPTION/WARNING http://php.net/manual/fr/pdo.error-handling.php, dans ce cas l'erreur sera bien explicite.

  5. #5
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    L'erreur 42S22 correspond à Unknown column.

    PS : par rapport aux deux points. Il arrive souvent en informatique qu'il n'y ait pas qu'un seul bug et donc la résolution du premier fait apparaître le second.

    PS2 : je ne suis pas spécialiste du fonctionnement interne de mysql, mais last insert id retourne le dernier autoincrement indépendamment de la table qui l'a généré.
    Donc question à poser à ceux qui connaissent. Est-ce qu'avec last insert id on ne risque pas de récupérer un id généré par l'action d'un autre utilisateur ?

  6. #6
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    @badaze https://mysql.developpez.com/faq/?pa...autoincremente
    Moi je n'arrive pas trop à comprendre le but de la manœuvre de jean-simon, mais s'il fait un INSERT suivi d'un UPDATE, je crois qu'une transaction assurera la cohérence des données.

  7. #7
    Membre averti
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 56
    Par défaut
    Trouvé !
    dans la table: é dans le nom du champs...
    merci à tous

  8. #8
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    @willy_k

    Merci !

  9. #9
    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
    Pour répondre à la question last insert id retourne le dernier id autoincrementé pour la connexion en cours ; il n'y heureusement pas de mélange avec les autres actions.
    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. [Debutant] faire un update sur tout une table
    Par Karibou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 14h44
  2. Probleme d'UPDATE sur un champ text
    Par Nip dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/07/2005, 11h35
  3. Problème lors d'un Update sur une date
    Par Nany dans le forum ASP
    Réponses: 3
    Dernier message: 19/05/2004, 22h37
  4. Pbleme UPDATE sur POSTGRESQL
    Par $grm$ dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/04/2004, 14h50
  5. update sur plusieurs nouvelles valeurs
    Par Mut dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/11/2003, 16h15

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