Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Problem pobierania danych z bazy danych, Dane z dwóch ostatnio dodanych rekordów niemożliwe do wczytania
wbeatn
post 12.09.2017, 19:33:09
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


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?

Ten post edytował wbeatn 12.09.2017, 19:34:18
Go to the top of the page
+Quote Post
nospor
post 12.09.2017, 19:47:20
Post #2





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




pokaz
var_dump($rezultat);
dla niewczytywanego ogloszenia


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wbeatn
post 12.09.2017, 20:45:27
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post 12.09.2017, 20:51:25
Post #4





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wbeatn
post 12.09.2017, 22:18:45
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
sabat24
post 12.09.2017, 22:39:40
Post #6





Grupa: Zarejestrowani
Postów: 175
Pomógł: 26
Dołączył: 13.09.2007
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
wbeatn
post 12.09.2017, 22:47:56
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.04.2024 - 20:54