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 renvoie 0 colonnes traitées [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut UPDATE renvoie 0 colonnes traitées
    Bonjour,

    je viens vers vous, car je deviens chèvre. Cela fait plusieurs jours que j'essaye en vain de trouver un code qui me permette de faire un UPDATE de ma base MySQL.

    Voici le résultat du var_dump :

    C:\wamp64\www\CatalogueTrains\process_modif.php:16:
    array (size=6)
    'pays' => string 'Chine' (length=5)
    'repertoire' => string 'Chinois_5' (length=9)
    'materiel' => string 'Chinois_5.eng' (length=13)
    'simulateur' => string 'ORTS' (length=4)
    'commentaire' => string 'TEST_12' (length=7)
    'modif' => string 'Enregistrer' (length=11)

    Retourne le nombre de champs mis à jour : Mis a jour 0 rows.

    Et voici 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
    <?php
     
       include_once('connect.php');
     
       // On s'assure que les données sont en utf8
       $db->EXEC("SET NAMES utf8");
     
       //On récupère les données
     
       $pays = $_POST['pays'];
       $repertoire = $_POST['repertoire'];
       $materiel = $_POST['materiel'];
       $simulateur = $_POST['simulateur'];
       $commentaire = $_POST['commentaire'];
     
       var_dump($_POST);
     
       //On écrit la requête
     
       $req = "UPDATE movies SET 
             pays = :pays, 
             repertoire = :repertoire, 
             materiel = :materiel,  
             simulateur = :simulateur,  
             commentaire = :commentaire  
       WHERE repertoire = :repertoire";
     
       $stmt = $db->prepare($req);                                  
       $stmt->bindParam(':pays', $_POST['pays'], PDO::PARAM_STR);       
       $stmt->bindParam(':repertoire', $_POST['$repertoire'], PDO::PARAM_STR);    
       $stmt->bindParam(':materiel', $_POST['materiel'], PDO::PARAM_STR);
       $stmt->bindParam(':simulateur', $_POST['simulateur'], PDO::PARAM_STR); 
       $stmt->bindParam(':commentaire', $_POST['commentaire'], PDO::PARAM_STR);
       $stmt->execute(); 
     
       // Retourne le nombre de champs mis à jour
       print("Retourne le nombre de champs mis à jour :\n");
       $count = $stmt->rowCount();
       print("Mis a jour $count rows.\n");
     
    ?>
    Je précise que je suis un grand débutant en php et mysql. Si quelqu'un pouvait me montrer pourquoi mon code ne fait rien, je lui en serais reconnaissant.

    Merci d'avance.

    Cordialement
    Pascal

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour,

    Petite coquille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     //$db->EXEC("SET NAMES utf8");
    // a mettre en minuscule
     
     $db->exec("set names utf8");
    Ensuite, la question la plus simple est , avez vous dans votre table un attribut répertoire avec 'Chinois_5' ?

  3. #3
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    Comme l'a dit mon compatriote @MaitrePylos, assurez-vous que dans votre DB, au moins un record ait comme valeur "Chinois_5" pour la colonne repertoire.
    (en réalité, on peut écrire $db->EXEC(), je l'ignorais mais j'ai testé ^^)

    Sinon, y'a un très gros problème dans le code et vous allez apprendre les joies du copier/coller dans le dev :
    Vous avez écrit $repretoire dans l'index $_POST
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Vous avez écrit :
    $stmt->bindParam(':repertoire', $_POST['$repertoire'], PDO::PARAM_STR); 
    // Au lieu de :
    $stmt->bindParam(':repertoire', $_POST['repertoire'], PDO::PARAM_STR);

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Ha chaud, je l'ai pas vue celle-là joli @darkstar123456

  5. #5
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Re et merci pour vos réponses genre "speedy gonzales".

    "assurez-vous que dans votre DB, au moins un record ait comme valeur "Chinois_5" pour la colonne repertoire.
    Oui, il y est et c'est la colonne "materiel" qui doit être modifiée, car elle contient "Chinois_4.eng", ce qui est faux.


    pays repertoire materiel simulateur commentaire
    Chine Chinois_5 Chinois_4.eng ORTS TEST_5 <-- extrait de la BDD

    Malgré les corrections, j'ai toujours 0 records d'updaté. Les noms des colonnes correspondent aux noms dans le formulaire.

    Vous remarquerez qu'il n'y a pas d'index. La seule colonne qui devrait être univoque est "materiel". J'ai malheureusement constaté des doublons, mais la colonne "repertoire" est différente. Ceci dit, je ne vois pas, à ce stade, l'utilité d'une indexation.

    Quand je vous dis que je deviens chèvre !

    Cordialement
    Pascal

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Pour être sur , on peux tenter ceci ?

    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
     
    <?php
     
    include_once('connect.php');
     
    // On s'assure que les données sont en utf8
    $db->EXEC("SET NAMES utf8");
     
    //On récupère les données
     
    $pays = $_POST['pays'];
    $repertoire = $_POST['repertoire'];
    $materiel = $_POST['materiel'];
    $simulateur = $_POST['simulateur'];
    $commentaire = $_POST['commentaire'];
     
    var_dump($_POST);
     
    //On écrit la requête
     
    $req = "UPDATE movies SET 
             pays = ?, 
             repertoire = ?, 
             materiel = ?,  
             simulateur = ?,  
             commentaire = ?  
       WHERE repertoire = ?";
     
    $stmt = $db->prepare($req);
    $stmt->execute([$pays,$repertoire,$materiel,$simulateur,$commentaire,$repertoire]);
     
    // Retourne le nombre de champs mis à jour
    print("Retourne le nombre de champs mis à jour :\n");
    $count = $stmt->rowCount();
    print("Mis a jour $count rows.\n");

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

Discussions similaires

  1. update d'une colonne entière sous bde
    Par gregcat dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/03/2007, 21h46
  2. Réponses: 4
    Dernier message: 31/10/2006, 19h03
  3. Update de plusieur colonne d'une meme table
    Par Poisson59 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 28/09/2006, 09h25
  4. [Oracle] Update sur 1 colonne avec condition existence (SUBSTR)
    Par magic charly dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/04/2006, 13h57
  5. update d'une colonne texte
    Par todd dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/10/2003, 13h12

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