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


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    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 = <img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />vdTitreX');  
              $OnFait = $bdd->prepare($majour);
              $OnFait->bindParam('<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />vdTitreX', $Dvd, PDO:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />ARAM_STR);
              $OnFait->bindParam(':ClasseurX', $Clui, PDO:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />ARAM_INT);
              $OnFait->execute();
        }
    }
    $reponse->closeCursor();
     
    ?>

  2. #2
    Modérateur

    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 régulier
    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=<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />vdTitreX');  
              $OnFait = $bdd->prepare($majour);
              $OnFait->bindParam('<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />vdTitreX', $Dvd, PDO:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />ARAM_STR);
              $OnFait->bindParam(':ClasseurX', $Clui, PDO:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />ARAM_INT);
              $OnFait->execute();
        }
    }
    $reponse->closeCursor();
     
    ?>

  4. #4
    Modérateur

    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:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />ARAM_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 régulier
    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
    Modérateur

    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 régulier
    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=<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />vdTitreX   ";
          $OnFait = $bdd->prepare($sql);
          $OnFait->execute(array('<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />vdTitreX'=>$Dvd,':ClasseurX'=>$Clui));
        }
    }

  8. #8
    Modérateur

    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.