![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%) ![]() ![]() |
Witam,
mam taki kod:
po uruchomieniu zawsze zostaje dodany jeden rekord do bazy a nie powinno dodac zadnego z powodu blednej drugiej instrukcji. Jeśli to samo napisze z użyciem PDO lub w bazie w golym SQL to dziala bez problemów a z mysqli nie chce... Pomóżcie ![]() Ten post edytował terabit 6.02.2010, 15:17:37 -------------------- |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Kod $success = true;
$mysqli->autocommit(false); if(!$mysqli->query($query1)) { $mysqli->rollback(); $success = false; } if($success && !$mysqli->query($query2)) { $mysqli->rollback(); $success = false; } ... if($success) $mysqli->commit(); Ten post edytował Mchl 6.02.2010, 15:28:51 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%) ![]() ![]() |
@Mchl - cos mi sie nie widzi te twoje rozwiazanie...
moze jakies inne pomysly? -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
@terabit chyba nie do końca rozumiesz ideę commit i rollback.
Commit - to potwierdzenie, zezwolenie, aby wszystkie zapytania zostały zatwierdzone w bazie. Rollback - to anulowanie zapytań, cofnięcie. Wykonujesz jedno z nich w zależności od powodzenia zapytań składowych. Czyli: 1. Wykonujesz zapytanie 1 2. Jeśli zapytanie zakończyło się błędem wykonujesz Rollback (nie ma sensu robić kolejnego skoro pierwsze jest niepoprawne) 3. Jeśli zapytanie 1 było ok, wykonujesz zapytanie 2 4. Jeśli zapytanie 2 było ok - Commit, jeśli nie Rollback -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%) ![]() ![]() |
@vokiel - rozumiem o co chodzi
![]() teraz widzę że na php.net jest podobny przydład jak ten od Mchl:
Zmyliła mnie po prostu książka wydana przez Zend... nie spodziewałem się takich błędów ![]() Ten post edytował terabit 6.02.2010, 16:14:00 -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
@Mchl - cos mi sie nie widzi te twoje rozwiazanie... moze jakies inne pomysly? Nie widzi Ci się... co ja na to poradzę... ważne że działa. Co do szczegółów ja akurat zamiast ustawiać zmieną $success rzucam wyjątkami, ale logika transakcji powinna być właście taka. http://dev.mysql.com/doc/refman/5.1/en/commit.html COMMIT nie sprawdza czy wszystkie zapytania w ramach transakcji zakończyły się powodzeniem. Po prostu potwierdza te, które się udały, a resztę olewa. Popróbuj sobie z konsoli to zobaczysz o co chodzi. Ten post edytował Mchl 6.02.2010, 16:16:15 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 19:42 |