Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem pobierania danych z bazy danych
Forum PHP.pl > Forum > PHP
wbeatn
Kłaniam się.

Otrzymałem do sprawdzenia pewien skrypt, który w żaden sposób niemodyfikowany przez wiele lat nagle przestał wczytywać dane, ale tylko z dwóch ostatnio dodanych do bazy rekordów.
Chodzi o to, że wczytuje on dane z konkretnej tabeli, aby je wyświetlić na podstronie ze szczegółami ogłoszenia. Co się okazuje z dwóch ostatnio dodanych ogłoszeń do bazy dane nie chcą się wczytywać na podstronie ze szczegółami.
Kiedy dodam nowe ogłoszenie, to dane z ogłoszenia, które przed dodaniem było drugim ostatnio dodanym ogłoszeniem nagle się wczytują, a nowo dodane ogłoszenie stając się ostatnio dodanym ogłoszeniem przejmuje jakby jego rolę i na podstronie ze swoimi szczegółami dane się nie wyświetlają.

Na podstronie nie wyskakują żadne błedy sygnalizowane przez PHP. Po prostu skrypt jakby do momentu, gdy ma wyświetlić to co wczytuje, wszystko widzi, ale "wydrukować" już nie chce. Dzieje się to zawsze tylko w przypadku dwóch ostatnio dodanych do bazy danych ogłoszeń.

Tutaj zapytanie MySQL w PHP:

  1. $rezultat = "SELECT
  2. wl.*,
  3. z.panstwo as zpan,
  4. z.miasto as zmia,
  5. z.kod as zkod,
  6. z.od,
  7. r.panstwo as rpan,
  8. r.miasto as rmia,
  9. r.kod as rkod,
  10. r.do,
  11. l.*,
  12. o.*,
  13. u.*
  14. FROM wolne_ladunki AS wl
  15.  
  16. JOIN zaladunek AS z
  17. ON z.id_zaladunek=wl.id_zaladunku
  18. JOIN rozladunek AS r
  19. ON r.id_rozladunek=wl.id_zaladunku
  20. JOIN ladunek AS l
  21. ON l.id_ladunek=wl.id_ladunku
  22. JOIN oplaty AS o
  23. ON o.id_oplata=wl.id_oplaty
  24. JOIN uzytkownik AS u
  25. ON u.id_uzytkownik=wl.id_uzytkownika
  26.  
  27. WHERE id_wolne_ladunki='".$szczegoly."'";
  28.  
  29. $wynik = mysql_query($rezultat) or die(mysql_error());
  30. $row = mysql_fetch_array($wynik);


oraz skrawek HTML gdzie powinny wyświetlić się dane

  1. <tr>
  2. <td>
  3. <div class="lewa">Kraj:</div>
  4. <div class="prawa"><?php echo $row['zpan']; ?></div>
  5. </td>
  6. <td>
  7. <div class="lewa">Kraj:</div>
  8. <div class="prawa"><?php echo $row['rpan']; ?></div>
  9. </td>
  10. </tr>
  11. <tr>
  12. <td>
  13. <div class="lewa">Miasto:</div>
  14. <div class="prawa"><?php echo $row['zmia']; ?></div>
  15. </td>
  16. <td>
  17. <div class="lewa">Miasto:</div>
  18. <div class="prawa"><?php echo $row['rmia']; ?></div>
  19. </td>
  20. </tr>
  21.  


Czy ktokolwiek z Was miał kiedyś taki problem? Skrypt przez kilka lat działa normalnie, nikt w żaden sposób w niego nie ingeruje, a tu nagle nie potrafi "wydrukować" danych z dwóch najnowszych rzędów tabeli SQL.
Nie wiem jak to ugryźć, bo trudno nawet szukać błędu skoro nawet PHP niczego nie podpowiada. Może potrzebujecie jakiś danych dotyczących tabeli, aby mieć pełniejszy obraz problemu?
nospor
pokaz
var_dump($rezultat);
dla niewczytywanego ogloszenia
wbeatn
Cytat(nospor @ 12.09.2017, 20:47:20 ) *
pokaz
var_dump($rezultat);
dla niewczytywanego ogloszenia


  1. STRING(594) "SELECT WL.*, Z.PANSTWO AS ZPAN, Z.MIASTO AS ZMIA, Z.KOD AS ZKOD, Z.OD, R.PANSTWO AS RPAN, R.MIASTO AS RMIA, R.KOD AS RKOD, R.DO, L.*, O.*, U.* FROM WOLNE_LADUNKI AS WL JOIN ZALADUNEK AS Z ON Z.ID_ZALADUNEK=WL.ID_ZALADUNKU JOIN ROZLADUNEK AS R ON R.ID_ROZLADUNEK=WL.ID_ZALADUNKU JOIN LADUNEK AS L ON L.ID_LADUNEK=WL.ID_LADUNKU JOIN OPLATY AS O ON O.ID_OPLATA=WL.ID_OPLATY JOIN UZYTKOWNIK AS U ON U.ID_UZYTKOWNIK=WL.ID_UZYTKOWNIKA WHERE ID_WOLNE_LADUNKI='8757'"


Tak jak napisałem, nie wyskakują żadne błędy. W samej bazie danych w rekordzie o ID 8757 (ostatnie dodane ogłoszenie) są dane, które powinny być wczytane na stronie, ale skrypt na stronie ich nie wyświetla. Jeśli dodam dwa kolejne, to nagle na podstronie ze szczegółami tego samego ogłoszenia dane będa się wyświetlać, ale na podstronach ze szczegółami tych dwóch najnowszych ogłoszeń już wyświetlać się nie będą. I tak w kołko.
nospor
JOINujesz wiele innych tabel, moze ktorys znich nie zawiera danych jakie powinien zawierac? Sprobuj zamienic te wszyskie JOIN na LEFT JOIN tak by sie tylko upewnic ze to nie to
wbeatn
Cytat(nospor @ 12.09.2017, 21:51:25 ) *
JOINujesz wiele innych tabel, moze ktorys znich nie zawiera danych jakie powinien zawierac? Sprobuj zamienic te wszyskie JOIN na LEFT JOIN tak by sie tylko upewnic ze to nie to


Dzięki za pomoc. Wymiana JOIN na LEFT JOIN nie była potrzebna, bo jak słusznie wskazałeś problem był w zapytaniu.

  1. JOIN zaladunek AS z
  2. ON z.id_zaladunek=wl.id_zaladunku
  3. JOIN rozladunek AS r
  4. ON r.id_rozladunek=wl.id_zaladunku


Jak widać w obu przypadkach podłączania tabel, przywołane jest odniesienie do kolumny `id_zaladunku`, a prawidłowo powinno być tak, że w przypadku podłączania tabeli `rozladunek` odniesienie powinno być do kolumny `wl.id_rozladunku`.
Zastanawia mnie tylko dlaczego komplikacje przy tak błędnym kodzie były tylko w przypadku dwóch najnowszych rekordów z bazy danych, a w pozostałych dane wyświetlały się poprawnie.
sabat24
Zapewne dlatego, że dla wcześniejszych rekordów id_zaladunek oraz id_rozladunek pokrywało się z id_zaladunku. To, że robiło JOINa (bo ID wartościowo się pokrywało), nie oznacza, że dostarczało Ci prawidłowe wyniki, a jeśli nawet, to w ramach przypadku.
wbeatn
Cytat(sabat24 @ 12.09.2017, 23:39:40 ) *
Zapewne dlatego, że dla wcześniejszych rekordów id_zaladunek oraz id_rozladunek pokrywało się z id_zaladunku. To, że robiło JOINa (bo ID wartościowo się pokrywało), nie oznacza, że dostarczało Ci prawidłowe wyniki, a jeśli nawet, to w ramach przypadku.


Jak najbardziej. smile.gif) Faktycznie dla każdego ogłoszenia oba ID były identyczne, bo każde ogłoszenie miało swoją grupę danych dot. rozladunku i zaladunku, więc jeśli ogłoszenia były dodawane na bieżaco jedno po drugim, to oba ID zawsze były takie same. Ktoś nie tyle mógł grzebać w skrypcie, a bezpośrednio w bazie danych.
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.