Page 1 sur 1

Update en mode array

Posté : 21 mars 2013, 13:38
par Cypher_PHP
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

Re: Update en mode array

Posté : 21 mars 2013, 15:30
par yann18
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";
             }
 

Re: Update en mode array

Posté : 21 mars 2013, 15:44
par Cypher_PHP
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 ;)

Re: Update en mode array

Posté : 22 mars 2013, 01:23
par moogli
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.


@+

Re: Update en mode array

Posté : 22 mars 2013, 06:11
par Fre3z69
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

Re: Update en mode array

Posté : 22 mars 2013, 10:31
par Cypher_PHP
oui ça marche

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

merci beaucoup

bonne journée