Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zapytanie + inner join = wynik jako json
Forum PHP.pl > Forum > Przedszkole
skabszo
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ł?
viking
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...
skabszo
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)
nospor
$result = $stmt->fetchAll( PDO::FETCH_ASSOC );
var_dump($result);
co to zwraca?
viking
Z kodu który tu wkleiłeś nie wynika żeby miało się gdzieś pojawić aaData. Za to jest coś takiego w pluginie DataTables.
skabszo
@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?
nospor
zapewne json_encode zwraca ci FALSE ktory jest spowodowany zlym kodowanie danych

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

Co to zwraca?
skabszo
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?
nospor
Musisz wszystkie teksty przekonwertowac na utf8.
skabszo
Cytat(nospor @ 21.03.2016, 13:57:37 ) *
Musisz wszystkie teksty przekonwertowac na utf8.

niestety nic to nie dało ;/
viking
Daj dla PDO po $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
nospor
Cytat
niestety nic to nie dało ;/
Ciekaw jestem jakzes to zrobil smile.gif
skabszo
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));
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.