Requête dans une boucle foreach
Résolu
someone
-
someone -
someone -
Bonjour,
Je cherche à mettre à jours de données après un test.
Je fais donc un select pour récupérer les donnés qui seront testées et après pour chacune des données tester je fais une mise à jour.
Je récupère bien les données et la mise à jour se passe bien mais j'arrive pas à mettre à jour la base de donnée.
Voici mon code.
Pouvez vous m'aider
Je cherche à mettre à jours de données après un test.
Je fais donc un select pour récupérer les donnés qui seront testées et après pour chacune des données tester je fais une mise à jour.
Je récupère bien les données et la mise à jour se passe bien mais j'arrive pas à mettre à jour la base de donnée.
Voici mon code.
$req2 = $db->prepare("SELECT IP, Etat, statut FROM lecteur_oui"); $req2->execute(); $row2 = $req2->fetchAll(); if($row2){ foreach ($row2 as $etat){ $ping = exec("ping -n 1 " . $etat['IP']); if (strpos($ping, "perte 100%")) { $newetat = "non"; } else { $newetat = "oui"; } $etat['statut']=''; if($etat['Etat'] != $newetat){ $etat['Etat'] = $newetat; $etat['statut'] = 'non-vérifié'; } //echo $etat['IP']." - ".$etat['Etat']." - ".$etat['statut']; $db->exec("UPDATE lecteur_oui SET Etat = ".$etat['Etat']." AND statut = ".$etat['statut']); } }
Pouvez vous m'aider
A voir également:
- Requête dans une boucle foreach
- Boucle excel sans macro - Forum Excel
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Mise à disposition de boucle locale dédiée ✓ - Forum Freebox
- Vlc lire en boucle ✓ - Forum Lecteurs et supports vidéo
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
comment détermines-tu quel enregistrement est mis à jour?
comment détermines-tu quel enregistrement est mis à jour?
someone
Quand je teste l'enregistrement 'ip' pour savoir son état, si l'état à une valeur différente de celle contenue dans la bdd et bien elle doit prendre la nouvelle valeur et ensuite je change le statut de l'ip tester en non-vérifié
Bonjour
Commence par ça
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Commence par ça
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
J'ai modifié mon code de sorte de voir les erreurs
et j'obtien comme erreur :
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp64\www\LEM_ControleAcces\Php\recupdonnee.php on line 32
( ! ) PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp64\www\LEM_ControleAcces\Php\recupdonnee.php on line 32
try { $db = new PDO('mysql:host=localhost;dbname=bdd_ctrl_acces_dev', 'root', ''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e){ die('Erreur de connexion à la base de données :' .$e->etMessage()); } $req2 = $db->prepare("SELECT IP, Etat, statut FROM lecteur_oui"); $req2->execute(); $row2 = $req2->fetchAll(); if($row2){ foreach ($row2 as $etat){ $ping = exec("ping -n 1 " . $etat['IP']); if (strpos($ping, "perte 100%")) { $newetat = "non"; } else { $newetat = "oui"; } if($etat['Etat'] != $newetat){ $etat['Etat'] = $newetat; $etat['statut'] = 'non-vérifié'; $sql = 'UPDATE lecteur_oui SET Etat = ? AND statut = ?'; $a = array('Etat'=>$etat['Etat'], 'statut='=>$etat['statut']); try{ $req = $db -> prepare($sql); $req ->execute($a); } catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($etat); } } echo $etat['IP']." - ".$etat['Etat']." - ".$etat['statut']; } }
et j'obtien comme erreur :
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp64\www\LEM_ControleAcces\Php\recupdonnee.php on line 32
( ! ) PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp64\www\LEM_ControleAcces\Php\recupdonnee.php on line 32