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 :

Requête update dans une boucle while [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 37
    Par défaut Requête update dans une boucle while
    Bonjour,

    J'essaie de mettre à jour un même champ pour tous les articles d'une table.
    J'ai une erreur dont je ne peux malheureusement pas vous dire la nature, parce que j'affiche le script dans un bloc IPB (les forums) et ça bloque purement et simplement toute la page.
    Enfin je pense que c'est une erreur de syntaxe qui va vous sauter aux yeux... Voici la bête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $dbh = new PDO('mysql:host=localhost;dbname=dicocom7_dico1','dico', '*****');   
     
    /** on définit la requete sql */
    $compte = $dbh->query('SELECT field_38 FROM cms_custom_database_6');
     
    while ($total = $compte->fetch())
    {
    $total=str_word_count($total);
    $bdh->exec('UPDATE cms_custom_database_6 SET field_53='.$total.'');
     
    ;}
    M'est avis que la requête UPDATE est un peu exotique, entre autres erreur éventuelles... Je n'en ai pour l'heure jamais utilisé dans un script mysqli, POO, tout ce que vous voulez...


    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ($row = $compte->fetch())
    {
        $total = str_word_count($row['field_38']);
        $bdh->exec('UPDATE `cms_custom_database_6` SET `field_53` = '.$total);
    }

  3. #3
    Inactif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 37
    Par défaut
    Salut rawsrc, merci pour ta réponse.

    J'obtiens cette erreur, avec ton bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function exec() on a non-object in /home1/dico/public_html/applications/cms/sources/Blocks/Block.php(195) : eval()'d code on line 10
    C'est dû à la fin, je crois. Tu as écrit '.$total sans rien d'autre ensuite. Mais si je complète en écrivant '.$total.', alors j'obtiens cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected ''); ' (T_ENCAPSED_AND_WHITESPACE) in /home1/dico/public_html/applications/cms/sources/Blocks/Block.php(195) : eval()'d code on line 10

  4. #4
    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 une requête répétée, on utilisera avantageusement une requête préparée.
    Concernant l'erreur "non object", tu as visiblement un problème avec ta connexion, affiche les erreurs ça sera mieux :
    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
     
    try {
        $dbh = new PDO('mysql:host=localhost;dbname=dicocom7_dico1','dico', '*****');
    } catch (PDOException $e) {
        echo 'Connexion échouée : ' . $e->getMessage();
    }
     
    $compte = $dbh->query('SELECT field_38 FROM cms_custom_database_6');
     
    $sth_update = $dbh->prepare('UPDATE cms_custom_database_6 SET field_53 = ?');
    while ($row = $compte->fetch())
    {
        $total=str_word_count($row['field_38']);
        $bdh->execute(array($total));
    }
    Tu as écrit '.$total sans rien d'autre ensuite.
    D'ou viens cette idée qu'il faut ajouter des .'' partout à la fin des chaines ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Inactif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 37
    Par défaut
    Salut Sabotage,

    En fait, ton code m'affiche une erreur fatal, lui aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function execute() on a non-object in /home1/dico/public_html/test-compteur.php on line 14
    La ligne 14, c'est celle-là : $bdh->execute(array($total));

    La connexion que j'utilise dans le premier script, elle fonctionne dans d'autres scripts.
    Sinon, si on pouvait rester sur ce premier script, ça m'arrangerait justement. Parce que ton bout de code - pour lequel je te remercie bien entendu - me parait un peu compliqué.

    Ca doit être une bête erreur de syntaxe, quelque part. Mais celle-ci m'est encore un peu étrangère.

  6. #6
    Inactif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 37
    Par défaut
    Ah ! C'est... Pas réussi. Dans le code de Sabotage, j'ai corrigé remplacé :

    $bdh->execute(array($total));
    Par
    $sth_update->execute(array($total));

    Et ça fonctionne... Presque. En fait le champ 53 est effectivement mis à jour. Mais pour tous les tuples affichent la même valeur pour le champ 53...

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

Discussions similaires

  1. [2012] Exécution d'une requête UPDATE dans une variable
    Par Fritzoune dans le forum Développement
    Réponses: 3
    Dernier message: 24/10/2014, 13h42
  2. [AC-2007] Sous-requête "Select" dans une requête "update"
    Par MatAllwhite dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/06/2013, 14h00
  3. Stocker une requête update dans une table
    Par bigtruck2010 dans le forum PL/SQL
    Réponses: 4
    Dernier message: 07/07/2011, 12h57
  4. [MySQL] Exécuter une requête UPDATE dans une boucle
    Par vacknov dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/10/2008, 17h46
  5. Réponses: 4
    Dernier message: 16/05/2006, 23h15

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