zrobiłem sobie warunek (if($i == 1) ((linijka 32 do 45)) aby zobaczyć czy w przypadku błędu nic w bazie sie nie wydarzy (dałem tam błedną nazwę tabeli - commentsa ) a okazuje się iż część danych z tabeli comments się usuwa (dokładnie 1 rekord ) który jest przepuszczany przez ten warunek.
natomiast to zapytanie : DELETE FROM projects WHERE project_no = ? - > jest cofane
co jest nie tak?
try{ $mysqli->autocommit(FALSE); $stmt1 = $mysqli->prepare("DELETE FROM projects WHERE project_no = ?"); $stmt1->bind_param("i", $project_no); if($stmt1->execute()==false){ throw new Exception ("Usunięcie projektu nie powiodło się (błąd w stmt1)"); } $stmt1->close(); $stmt2=$mysqli->prepare("SELECT com_id FROM comments WHERE com_object_id=?"); $stmt2->bind_param("i",$project_no); if($stmt2->execute()==false){ throw new Exception ("Usunięcie projektu nie powiodło się (błąd w stmt2)"); } $stmt2->bind_result($com_id); $i=0; while($stmt2->fetch()){ $tablica[$i]=$com_id; $i++; } For($i=0;$i<$ile; $i++){ if($i == 1){ if($result= $mysqli->prepare("DELETE FROM commentsa WHERE com_id = ?")){ $result->bind_param("i",$tablica[$i]); if($result->execute()==false){ throw new Exception ("Usunięcie projektu nie powiodło się (błąd w result): "); } }else{ throw new Exception ("Usunięcie projektu nie powiodło się (błąd w result): "); } } if($result= $mysqli->prepare("DELETE FROM comments WHERE com_id = ?")){ $result->bind_param("i",$tablica[$i]); if($result->execute()==false){ throw new Exception ("Usunięcie projektu nie powiodło się (błąd w result): "); } }else{ throw new Exception ("Usunięcie projektu nie powiodło się (błąd w result): "); } } //$stmt1->close(); $stmt2->close(); $result->close(); $mysqli->commit(); }catch(Exception $e){ $mysqli->rollback(); }