Bonjour à tous,

Afin de capter toutes les erreurs dans une transaction j'utilise le code suivant :

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);
};
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
if($this->BDD->exec($query_inDescript)===0) $commit=false;
ce qui fait que la transaction "rollback" et que les autres requetes ne sont bien sûr pas validées.

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