[RESOLU] Update en mode array

Eléphant du PHP | 258 Messages

21 mars 2013, 13:38

Bonjour

J'ai un petit problème d'update.En fait, je voulais mettre à jour les valeurs en fonction de leur id respectif

je constate que la requête sql ne fait que mettre à jour le dernier . Or ca devrait tout mettre à jour

voici mon code
$value = array('Madrid'=>'1','Roma'=>'2','Lisbonn'=>'3' );
            foreach($value as $key => $val){
                $sql = "UPDATE `tutos` SET  title ='$key' WHERE id = '$val' ";
                echo $sql."<br />";
                }
            $stmt = $db->prepare($sql);
            $stmt->execute(); 
            if ( $stmt ) { 
                 echo "Update en masse réussie";
             } else{
                  echo "echec";
             }
Merci beaucoup de votre aide
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

Mammouth du PHP | 571 Messages

21 mars 2013, 15:30

bonjour,
essaies ça:

$value = array('Madrid'=>'1','Roma'=>'2','Lisbonn'=>'3' );
            foreach($value as $key => $val){
                $sql = "UPDATE `tutos` SET  title =:title WHERE id = :id ";
                echo $sql."<br />";
                }
            $stmt = $db->prepare($sql);
            $stmt->execute(array(':title'=>$key, ':id'=>$val);
            if ( $stmt ) {
                 echo "Update en masse réussie";
             } else{
                  echo "echec";
             }
 

Eléphant du PHP | 258 Messages

21 mars 2013, 15:44

voici la réponse
UPDATE `tutos` SET title =:title WHERE id = :id
UPDATE `tutos` SET title =:title WHERE id = :id
UPDATE `tutos` SET title =:title WHERE id = :id
Update en masse réussie
donc presque pas bon ;)
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 mars 2013, 01:23

1/pas espion de requête préparée utilise query.
2/ le prépare et l'exécute étant en dehors du foreach le comportement décrit est normal.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 418 Messages

22 mars 2013, 06:11

Salutation,

Je rejoint Moogli, tu exécute ta requête en dehors de ta boucle, c'est normale qu'il ne prenne en compte que la dernière valeur.

Exécute la dans la boucle, tu verras ça fonctionneras mieux ;-)

Et pour:
            $stmt = $db->prepare($sql);
            $stmt->execute(array(':title'=>$key, ':id'=>$val);
Fait plutôt du genre:
            $stmt = $db->query($sql);
            $stmt->execute(array(':title'=>$key, ':id'=>$val);
En espérant que ça t'aideras

Cordialement

Eléphant du PHP | 258 Messages

22 mars 2013, 10:31

oui ça marche

je suis un peu bête d'avoir pas pensé à mettre ces lignes dans la boucle

merci beaucoup

bonne journée
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver