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 :

tranferer une valeur entre deux tables [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 202
    Points : 916
    Points
    916
    Par défaut tranferer une valeur entre deux tables
    Bonjour,
    j'ai deux table (une ancienne et la nouvelle)
    je veux récupérer une valeur et la mettre dans tout les data concernés j'ai une erreur dans le WHERE ??
    pouvez-vous m'aider, merci
    Code PHP : 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
    <?php
    $reponse = $bdd->query('SELECT * FROM 0dvd_classeur');
    while ($donnees = $reponse->fetch())
    {
        $Dvd= $donnees['DvdTitre'];
        $Clui= $donnees['Classeur'];
        if ($Clui=="11" || $Clui==11) 
        {
          $Dvd=str_replace("_","-",$Dvd);
          $Dvd=str_replace(" ","-",$Dvd);
          echo "==>".$Dvd."<==<br />";     
          $majour = $bdd->query('UPDATE 0dvdjp_classeur SET Classeur , :ClasseurX  WHERE DvdTitre = :DvdTitreX');  
              $OnFait = $bdd->prepare($majour);
              $OnFait->bindParam(':DvdTitreX', $Dvd, PDO::PARAM_STR);
              $OnFait->bindParam(':ClasseurX', $Clui, PDO::PARAM_INT);
              $OnFait->execute();
        }
    }
    $reponse->closeCursor();
     
    ?>

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,

    euh tu ne vois pas comme une virgule mal placée là-dedans :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SET Classeur , :ClasseurX
    D'ailleurs ton code est bancal, pourquoi donc à chaque tour tu fais un bindParam() ? C'est déjà une liaison par référence...

  3. #3
    Membre éprouvé
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 202
    Points : 916
    Points
    916
    Par défaut
    Merci encore,
    J'ai cette erreur
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe prés de ':ClasseurX WHERE DvdTitre=:DvdTitreX' à la ligne 1' in C:\jpbhtml\1 web smala videos\a.php:26 Stack trace: #0 C:\jpbhtml\1 web smala videos\a.php(26): PDO->query('UPDATE 0dvdjp_c...') #1 {main} thrown in C:\jpbhtml\1 web smala videos\a.php on line 26
    Avec le code modifié ainsi:

    Code PHP : 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
    <?PHP
    $reponse = $bdd->query('SELECT * FROM 0dvd_classeur');
    while ($donnees = $reponse->fetch())
    {
        $Dvd= $donnees['DvdTitre'];
        $Clui= $donnees['Classeur'];
        if ($Clui=="11" || $Clui==11) 
        {
          $Dvd=str_replace("_","-",$Dvd);
          $Dvd=str_replace(" ","-",$Dvd);
          echo "==>".$Dvd."<==<br />";        
          $majour = $bdd->query('UPDATE 0dvdjp_classeur SET Classeur=:ClasseurX WHERE DvdTitre=:DvdTitreX');  
              $OnFait = $bdd->prepare($majour);
              $OnFait->bindParam(':DvdTitreX', $Dvd, PDO::PARAM_STR);
              $OnFait->bindParam(':ClasseurX', $Clui, PDO::PARAM_INT);
              $OnFait->execute();
        }
    }
    $reponse->closeCursor();
     
    ?>

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Tu utilises mal PDO, tu devrais plutôt faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $stmt = $bdd->query('SELECT * FROM 0dvd_classeur');
    $data = $stmt->fetchAll();
     
    $sql  = "UPDATE 0dvdjp_classeur SET Classeur = {$classeur} WHERE DvdTitre = {$dvd}";
    $stmt = $bdd->prepare($sql);
    $stmt->bindParam($classeur, \PDO::PARAM_INT);
    $stmt->bindParam($dvd);
     
    foreach ($data as list('Classeur' => $classeur, 'DvdTitre' => $dvd)) {
        if ((int)$classeur === 11) {
            $dvd = str_replace(['_', ' '], '-', $dvd);
            $stmt->execute();
        }
    }

  5. #5
    Membre éprouvé
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 202
    Points : 916
    Points
    916
    Par défaut
    Oui c'est superbe cette syntaxe, par contre c'est ridicule car je vois que je n'ai même pas expliqué ce que je voulais
    l'ancienne table est celle que je parcours, la nouvelle est identique mais les noms (DvdTitre) n'ont plus d'espaces ni d'andercore mais des "-"
    donc je cherches dans les 9700 noms de DVD tout ceux qui dans l'ancienne table ont le champ (Classeur) (numéro du classeur est "11" (c'est un int)
    il faut alors que je le mettes dans la nouvelle base donc pour mettre à jour le data je prend le nom et modifie les " " "_" en "-"
    et donc j'ai sa clé dans la nouvelle table... et grâce a ce nom je peux aller mettre 11 dans tout les enregistrement dont le nom est celui trouvé !
    Peux tu avoir la gentillesse de modifier ton code pour remplir ce besoins et excuses moi d'avoir été si brouillon !

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    je n'ai pas tout compris

    déjà si tu cherches dans l'ancienne table les films d'un classeur en particulier, tu peux déjà filtrer sur le numéro de classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $stmt = $bdd->query('SELECT * FROM 0dvd_classeur WHERE Classeur = 11';
    là je ne comprends rien :
    Citation Envoyé par JPongivart
    donc j'ai sa clé dans la nouvelle table... et grâce a ce nom je peux aller mettre 11 dans tout les enregistrement dont le nom est celui trouvé

  7. #7
    Membre éprouvé
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 202
    Points : 916
    Points
    916
    Par défaut
    Excuses moi,
    Dans l'ancienne table de plus de 9.000 data, une centaine de nom différents bien sur ont comme classeur 11
    Donc
    1) je parcours l'ancienne table et dans le while donc, à chaque fois que c'est classeur 11 je refabrique son nom xxx-rrr-ggg-.m2ts par exemple
    alors que son nom dans l'ancienne table est xx rrr_ggg-.m2ts ainsi je peux chercher le data de la nouvelle table (qui existe forcément)
    2) et donc y y mettre lavaleur 11 !

    Merci de ta patience. et bonne semaine confinée je supposes, ...
    Voila je réédites tout est OK !
    Code PHP : 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
     
    $reponse = $bdd->query('SELECT * FROM 0dvd_classeur');
    while ($donnees = $reponse->fetch())
    {
        $Dvd= $donnees['DvdTitre'];
        $Clui= $donnees['Classeur'];
        if (intval($Clui) === 11) 
        {
          $Clui=intval($Clui);
          $Dvd = strtr($Dvd, '_ ', '--'); 
          echo "==>".$Dvd."<==<br />";       
          $sql = " UPDATE    0dvd  SET   Pochette=:ClasseurX    WHERE     DvdTitre=:DvdTitreX   ";
          $OnFait = $bdd->prepare($sql);
          $OnFait->execute(array(':DvdTitreX'=>$Dvd,':ClasseurX'=>$Clui));
        }
    }

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,

    pourquoi tu n'as pas gardé ma syntaxe avec bindParam() ? Elle est bien plus appropriée que celle que t'utilises où tu passes par l'étape de la préparation à chaque tour de boucle.

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

Discussions similaires

  1. basculer une valeur entre deux listes
    Par carlostropico dans le forum IHM
    Réponses: 2
    Dernier message: 10/11/2008, 11h14
  2. [XPATH] Rechercher une valeur entre deux valeurs min et max
    Par icicmoi dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/10/2008, 12h12
  3. Supprimer et créer une relation entre deux tables
    Par bassiste dans le forum Administration
    Réponses: 1
    Dernier message: 18/07/2008, 20h20
  4. [MySQL] Faire une jointure entre deux tables qui ne sont pas dans la même base de données
    Par sandddy dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 03/04/2008, 14h18
  5. faire une différence entre deux tables
    Par geay dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/09/2006, 15h33

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