Bonjour à tous,
Afin de capter toutes les erreurs dans une transaction j'utilise le code suivant :
Le problème étant que s'il n'y a pas de changement entre le champ "descriptif" déjà dans la base de données et celui envoyé par la page, $commit devient false.
Code : 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
22
23 $query_rsDescriptif ="SELECT descriptif FROM activites WHERE ID=".$_POST["ID"]; $rsDescriptif=$this->BDD->query($query_rsDescriptif); $row_rsDescriptif = $rsDescriptif->fetch(PDO::FETCH_ASSOC); $commit = true; $this->BDD->beginTransaction(); $descriptif=addslashes(trim($_POST["descriptif"])); if($descriptif !=""){ $query_inDescript="UPDATE activites_textes SET texte='".$descriptif."' WHERE ID=".$row_rsDescriptif["descriptif"]; if($this->BDD->exec($query_inDescript)===0) $commit=false; }; $query_rsModifActi="UPDATE activites SET ".$set." WHERE ID=".$_POST["ID"]; if($this->BDD->exec($query_rsModifActi)===0) $commit=false; if($commit == true) $this->BDD->commit(); else { $this->BDD->rollback(); echo '<script>alert("Cette opération n\'a pas pu être validée en raison d\'une erreur interne.\n Merci de ré-essayer.")</script>'; exit(0); };
ce qui fait que la transaction "rollback" et que les autres requetes ne sont bien sûr pas validées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if($this->BDD->exec($query_inDescript)===0) $commit=false;
Est-ce normal qu'un UPDATE sans modifications renvoie 0 au niveau du nombre de lignes modifiées ?
Si oui, donc il faut faire une vérification d'une éventuelle modification avant de lancer une requête UPDATE ?
Merci d'avance pour vos réponses
Partager