Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Transakcja - która mimo wszystko coś kasuje
Forum PHP.pl > Forum > Bazy danych
japolak
cos w mojej transakcji nie działa:

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?


  1. try{
  2.  
  3. $mysqli->autocommit(FALSE);
  4.  
  5. $stmt1 = $mysqli->prepare("DELETE FROM projects WHERE project_no = ?");
  6. $stmt1->bind_param("i", $project_no);
  7. if($stmt1->execute()==false){
  8. throw new Exception ("Usunięcie projektu nie powiodło się (błąd w stmt1)");
  9. }
  10. $stmt1->close();
  11.  
  12. $stmt2=$mysqli->prepare("SELECT com_id FROM comments WHERE com_object_id=?");
  13. $stmt2->bind_param("i",$project_no);
  14. if($stmt2->execute()==false){
  15. throw new Exception ("Usunięcie projektu nie powiodło się (błąd w stmt2)");
  16. }
  17.  
  18. $stmt2->bind_result($com_id);
  19.  
  20. $i=0;
  21. while($stmt2->fetch()){
  22.  
  23. $tablica[$i]=$com_id;
  24. $i++;
  25. }
  26.  
  27.  
  28. $ile=count($tablica);
  29.  
  30. For($i=0;$i<$ile; $i++){
  31.  
  32. if($i == 1){
  33.  
  34. if($result= $mysqli->prepare("DELETE FROM commentsa WHERE com_id = ?")){
  35. $result->bind_param("i",$tablica[$i]);
  36. if($result->execute()==false){
  37. throw new Exception ("Usunięcie projektu nie powiodło się (błąd w result): ");
  38. }
  39.  
  40.  
  41. }else{
  42. throw new Exception ("Usunięcie projektu nie powiodło się (błąd w result): ");
  43. }
  44.  
  45. }
  46.  
  47.  
  48. if($result= $mysqli->prepare("DELETE FROM comments WHERE com_id = ?")){
  49. $result->bind_param("i",$tablica[$i]);
  50. if($result->execute()==false){
  51. throw new Exception ("Usunięcie projektu nie powiodło się (błąd w result): ");
  52. }
  53.  
  54.  
  55. }else{
  56. throw new Exception ("Usunięcie projektu nie powiodło się (błąd w result): ");
  57. }
  58.  
  59.  
  60. }
  61.  
  62.  
  63.  
  64.  
  65. //$stmt1->close();
  66.  
  67. $stmt2->close();
  68. $result->close();
  69. $mysqli->commit();
  70.  
  71.  
  72. }catch(Exception $e){
  73.  
  74. $mysqli->rollback();
  75. echo $e->getMessage();
  76. }
Pyton_000
comments jest na innoDB ?
japolak
Cytat(Pyton_000 @ 26.04.2017, 10:57:54 ) *
comments jest na innoDB ?


hehe;) godzine czasu sie zastanawiałem i kombinowałem co z tym nie tak
a na dodatek dzis jeszcze specjalnie zmienialem projects na innodb

tongue.gif dzięki wielki - > w tym był haczyk..
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.