Archiwa
Kategorie
Reklama

phpBB — Nie istnieją żadne posty dla tego tematu

Bywa, że forach opar­tych na phpBB v2 (i tylko w wer­sji 2) wystę­puje błąd pole­ga­jący na tym, że na ostat­niej stro­nie wątku otrzy­mu­jemy komu­ni­kat:
„Nie ist­nieją żadne posty dla tego tematu„
Wła­śnie taka przy­jem­ność mnie trafiła.

Skąd się bie­rze taki błąd i co z nim można zro­bić?
Błąd wynika z braku trans­ak­cyj­no­ści phpBB. Przy kaso­wa­niu postu, na sku­tek prze­rwa­nia ope­ra­cji znik­nął rekord z tre­ścią z tablicy phpbb_post_texts ale nie znik­nął z tablicy phpbb_posts. Baza stała się niespójna.

Roz­wią­za­nia pro­po­no­wane na róż­nych forach przy­pra­wiły mnie o dresz­cze. Kil­ku­dzie­się­cio­li­niowe frag­menty w php roz­wią­zy­wały nie­zro­zu­miały pro­blem w nie­zro­zu­miały mi spo­sób. Po chwili ana­lizy kodu mach­ną­łem takie drobne zapy­ta­nie w sql. Mam wra­że­nie, że jest dużo bar­dziej 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łu­ma­cząc sql na ludzki:

Usu­wamy takie wier­sze z tablicy phpbb_posts, które po złą­cze­niu zewnętrz­nym phpbb_posts z tablicą phpbb_posts_text nie zna­la­zły swo­ich odpowiedników.

Na małym PC, skrypt oczy­ścił mi forum zawie­ra­jące ponad 50 000 postów w nie­całą sekundę.

5 odpowiedzi na „phpBB — Nie istnieją żadne posty dla tego tematu

  • kolo says:

    a czy masz jakis pomysl na usu­nie­cie tego bledu w phpbb3 ?pozdrawiam

  • Bogdan says:

    A tuś mi zabił ćwieka :)
    Zaj­rza­łem do skryp­tów bazy i jak mi się wydaje na pierw­szy 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ć przy­kład, żeby zdiagnozować.

  • kolo says:

    a czy te bledy razem z bledna baza z phpbb2 prze­kon­wer­to­wuja sie na phpbb3 ?

  • Bogdan says:

    Jak pisa­łem poprzed­nio, ten błąd, który opi­sy­wa­łem, nie ma prawa wystą­pić w phpbb3. Wynika to ze struk­tury danych.
    Baza jest inna niż phpb2, więc błąd nie może ani powstać ani zostać prze­nie­siony.
    Jeżeli jed­nak taki komu­ni­kat wystę­puje w phpbb3, ozna­cza, że twórcy pro­gramu tym samym komu­ni­ka­tem ozna­czyli zupeł­nie inny błąd. Nie­stety (a może całe szczę­ście) nie natra­fi­łem na niego, więc nie wiem kiedy może wystą­pić. A bra­kuje mi samo­za­par­cia, żeby dłu­bać w kodzie nie mając błęd­nej bazy.

  • kolo says:

    dzie­kuje za wyczer­pu­jącą odpo­wiedz . kła­niam sie nisko