Bywa, że forach opartych na phpBB v2 (i tylko w wersji 2) występuje błąd polegający na tym, że na ostatniej stronie wątku otrzymujemy komunikat:
„Nie istnieją żadne posty dla tego tematu”
Właśnie taka przyjemność mnie trafiła.
Skąd się bierze taki błąd i co z nim można zrobić?
Błąd wynika z braku transakcyjności phpBB. Przy kasowaniu postu, na skutek przerwania operacji zniknął rekord z treścią z tablicy phpbb_post_texts ale nie zniknął z tablicy phpbb_posts. Baza stała się niespójna.
Rozwiązania proponowane na różnych forach przyprawiły mnie o dreszcze. Kilkudziesięcioliniowe fragmenty w php rozwiązywały niezrozumiały problem w niezrozumiały mi sposób. Po chwili analizy kodu machnąłem takie drobne zapytanie w sql. Mam wrażenie, że jest dużo bardziej zrozumiałe:
delete p.* FROM phpbb_posts p
LEFT JOIN phpbb_posts_text t ON p.post_id = t.post_id
WHERE t.post_id IS NULL;
Tłumacząc sql na ludzki:
Usuwamy takie wiersze z tablicy phpbb_posts, które po złączeniu zewnętrznym phpbb_posts z tablicą phpbb_posts_text nie znalazły swoich odpowiedników.
Na małym PC, skrypt oczyścił mi forum zawierające ponad 50 000 postów w niecałą sekundę.
a czy masz jakis pomysl na usuniecie tego bledu w phpbb3 ?pozdrawiam
A tuś mi zabił ćwieka 🙂
Zajrzałem do skryptów bazy i jak mi się wydaje na pierwszy rzut oka, ten błąd nie ma prawa wystąpić, bo tabele phpbb_posts i phpbb_posts_text w phpbb3 są połączone!
Musiałbym mieć przykład, żeby zdiagnozować.
a czy te bledy razem z bledna baza z phpbb2 przekonwertowuja sie na phpbb3 ?
Jak pisałem poprzednio, ten błąd, który opisywałem, nie ma prawa wystąpić w phpbb3. Wynika to ze struktury danych.
Baza jest inna niż phpb2, więc błąd nie może ani powstać ani zostać przeniesiony.
Jeżeli jednak taki komunikat występuje w phpbb3, oznacza, że twórcy programu tym samym komunikatem oznaczyli zupełnie inny błąd. Niestety (a może całe szczęście) nie natrafiłem na niego, więc nie wiem kiedy może wystąpić. A brakuje mi samozaparcia, żeby dłubać w kodzie nie mając błędnej bazy.
dziekuje za wyczerpującą odpowiedz . kłaniam sie nisko