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
3 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
comment détermines-tu quel enregistrement est mis à jour? -
Bonjour
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
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
-
-
$sql = 'UPDATE lecteur_oui SET Etat = :etat , statut = :statut WHERE IP = :ip'; $a = array(':etat'=>$etat['Etat'], ':statut='=>$etat['statut'], ':ip'=> $etat['IP']);