Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Zapytanie + inner join = wynik jako json
skabszo
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


Cześć wszystkim,

Mam problem z poniższym kodem. Otóż poprawnie łączy się on z bazą danych, ale nie wyświetla niczego - strasznie długo mieli i wyswietla tylko: {"aaData":}. To samo zapytanie wywołane przez phpmyadmin pięknie wyświetla wynik. Tabele nie zawierają dużej ilości danych - tabela wizyty to jakieś 1200 wierszy, pozostałe łącznie jakieś 400 wierszy.

  1. <?php
  2.  
  3. // set up the connection variables
  4. $db_name = '';
  5. $hostname = 'localhost';
  6. $username = '';
  7. $password = '';
  8.  
  9. // connect to the database
  10. $dbh = new PDO("mysql:host=$hostname;dbname=$db_name", $username, $password);
  11.  
  12. // a query get all the records from the users table
  13. $sql = 'select
  14. WIZYTY.ID as visitno,
  15. WIZYTY.DATA_ZGLOSZ as visitdate,
  16. ANIMALS.NAZWA as animalname,
  17. CUSTOMER.NAZWA as customername,
  18. DOCTORS.NAZWA as doctorname,
  19. WIZYTY.AMOUNT as visittotal
  20. from WIZYTY
  21. inner join ANIMALS on ANIMALS.ANI_ID = WIZYTY.ANI_ID
  22. inner join CUSTOMER on CUSTOMER.CUST_ID = WIZYTY.CUST_ID
  23. inner join DOCTORS on DOCTORS.DOCTOR_ID = WIZYTY.DOCTOR_ID
  24. group by WIZYTY.ID order by WIZYTY.ID';
  25.  
  26. // use prepared statements, even if not strictly required is good practice
  27. $stmt = $dbh->prepare( $sql );
  28.  
  29. // execute the query
  30. $stmt->execute();
  31.  
  32. // fetch the results into an array
  33. $result = $stmt->fetchAll( PDO::FETCH_ASSOC );
  34.  
  35. // convert to json
  36. $json = json_encode( $result );
  37.  
  38. // echo the json string
  39. echo "{\"aaData\":";
  40. echo $json;
  41. echo "}";
  42. ?>


Dlaczego tak jest? Ma ktoś pomysł, jak usprawnić ten kod i sprawić by działał?

Ten post edytował skabszo 21.03.2016, 13:46:58
Go to the top of the page
+Quote Post
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Czy zapytanie odpalone na bazie zwraca wyniki? Nie zbierasz żadnego błędu więc ciężko stwierdzić. Aliasy możesz też dla tabel stosować ... from WIZYTY w i select w.id...


--------------------
Go to the top of the page
+Quote Post
skabszo
post
Post #3





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


Cytat(viking @ 21.03.2016, 12:07:26 ) *
Czy zapytanie odpalone na bazie zwraca wyniki? Nie zbierasz żadnego błędu więc ciężko stwierdzić. Aliasy możesz też dla tabel stosować ... from WIZYTY w i select w.id...


hej, troszkę zmieniłem teraz post (edytowałem go). Obecnie problem jest taki:
- skrypt mieli, mieli, mieli - wyświetla tylko: {"aaData":} bez żadnych wyników

to samo zapytanie do bazy wyświetla wszystko (jak wspomniałem, przez phpmyadmin)
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




$result = $stmt->fetchAll( PDO::FETCH_ASSOC );
var_dump($result);
co to zwraca?


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

"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
viking
post
Post #5





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Z kodu który tu wkleiłeś nie wynika żeby miało się gdzieś pojawić aaData. Za to jest coś takiego w pluginie DataTables.


--------------------
Go to the top of the page
+Quote Post
skabszo
post
Post #6





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


@Viking - poprawiłem kod, to na samym końcu jest

@nospor:

coś takiego wypluwa:
  1. array(1234) { [0]=> array(6) { ["visitid"]=> string(1) "1" ["visitdate"]=> string(10) "2015-07-27" ["animalname"]=> string(4) "Ares" ["customername"]=> string(19) "Kowalski Jan" ["doctorname"]=> string(10) "Wolczuk" ["visittotal"]=> string(8) "100.0000" }


dziwne bo w takim razie on te dane chyba przetwarza (w sensie skrypt) tylko nie chce tego pokazać jako tablicy?
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




zapewne json_encode zwraca ci FALSE ktory jest spowodowany zlym kodowanie danych

$json = json_encode( $result );
var_dump($json);

Co to zwraca?


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

"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
skabszo
post
Post #8





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


Cytat(nospor @ 21.03.2016, 13:53:01 ) *
zapewne json_encode zwraca ci FALSE ktory jest spowodowany zlym kodowanie danych

$json = json_encode( $result );
var_dump($json);

Co to zwraca?


masz rację - takie coś:
  1. bool(false) {"aaData":}


Da się to jakoś naprawić czy to problem całej bazy?
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Musisz wszystkie teksty przekonwertowac na utf8.


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

"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
skabszo
post
Post #10





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


Cytat(nospor @ 21.03.2016, 13:57:37 ) *
Musisz wszystkie teksty przekonwertowac na utf8.

niestety nic to nie dało ;/
Go to the top of the page
+Quote Post
viking
post
Post #11





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Daj dla PDO po $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
niestety nic to nie dało ;/
Ciekaw jestem jakzes to zrobil smile.gif


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

"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
skabszo
post
Post #13





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 27.08.2004

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


Cytat(viking @ 21.03.2016, 14:35:55 ) *
Daj dla PDO po $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")



oo! super smile.gif wszystko się pojawiło, jedyny problem jaki został to o dziwo (kodowałem bazę w notepadzie++, dane też są wprowadzane przez utf8 bez bom) brak polskich znaków. Zamiast tego dziwne symbole: np zamiast Ł jest \u0142

szukałem na szybko rozwiązania, ale nie przyniosło ono skutku -.-

Cytat(nospor @ 21.03.2016, 14:40:16 ) *
Ciekaw jestem jakzes to zrobil smile.gif


w taki sposób:
http://www.forum.tweaks.pl/Konwersja-bazy-...wrotnie-t49663/

Udało się!

oto kod:

  1. header('Content-type: application/json; charset=utf-8');
  2. header('Content-type: text/html; charset=utf-8');
  3. $ustr = array('\u0104','\u0106','\u0118','\u0141','\u0143','\u00d3','\u015a','\u0179','\u017b','\u0105','\u0107','\u0119','\u0142','\u0144','\u00f3','\u015b','\u017a','\u017c');
  4. $plstr = array('Ą','Ć','Ę','Ł','Ń','Ó','Ś','Ź','Ż','ą','ć','ę','ł','ń','ó','ś','ź','ż');
  5.  
  6. $json = str_replace($ustr,$plstr,json_encode($result));
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 Aktualny czas: 19.08.2025 - 18:19