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?
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();
}
Ten post edytował japolak 26.04.2017, 10:47:24