Jak korzystać z json_encode()funkcji z wynikami zapytań MySQL? Czy muszę iterować przez wiersze, czy mogę po prostu zastosować go do całego obiektu wyników?
Wiem, że to bardzo stare pytanie. Ale nikt nie pokazuje najprostszej alternatywy dla rozwiązania problemu liczb całkowitych wyświetlanych jako łańcuchy. @mouckatron oferuje flagę JSON_NUMERIC_CHECK json_encode()w odpowiedzi poniżej. Prosty i działa jak urok! stackoverflow.com/questions/1390983/…
Radzę równie dobrze, jak wspomnieć, że podczas kwerendy wybierz, aby użyć ASdo zmiany nazwy kolumn na coś publicznego, na przykład SELECT blog_title as titlejest to czystsze, a społeczeństwo nie wie, jakie dokładnie kolumny pochodzą z bazy danych.
RobertPitt,
14
Ten kod błędnie koduje wszystkie wartości liczbowe jako ciągi. Na przykład pole liczbowe mySQL o nazwie score miałoby wartość JSON „12” zamiast 12 (zauważ cudzysłowy).
ten da nam tablicę zawierającą; 1) pusty nawias kwadratowy 2), a następnie nawias klamrowy zawierający nasze wiersze wyników, co to różni się od drugiego?
Z mojego doświadczenia wynika, że powyższe nie zadziała, zanim nazwiesz element root w tablicy na coś, nie byłem w stanie uzyskać dostępu do niczego w ostatnim jsonie wcześniej.
$sql ='SELECT CONCAT("[", GROUP_CONCAT(CONCAT("{username:'",username,"'"), CONCAT(",email:'",email),"'}")), "]")
AS json
FROM users;'
$msl = mysql_query($sql)print($msl["json"]);
Po prostu:
"SELECT"Select the rows
"CONCAT"Returns the string that results from concatenating (joining) all the arguments
"GROUP_CONCAT"Returns a stringwith concatenated non-NULL valuefrom a group
2.) jeśli wynik $ jest większy niż jeden wiersz. Musisz iterować wiersze i zapisać je w tablicy, a następnie zwróci json z tablicą.
$rows = array();if(mysql_num_rows($result)>0){while($r = mysql_fetch_assoc($result)){
$id = $r["USERID"];//a column name (ex.ID) used to get a value of the single row at at time
$rows[$id]= $r;//save the fetched row and add it to the array.}}
echo json_encode($rows);
$array = array();
$subArray=array();
$sql_results = mysql_query('SELECT * FROM `location`');while($row = mysql_fetch_array($sql_results)){
$subArray[location_id]=$row['location'];//location_id is key and $row['location'] is value which come fron database.
$subArray[x]=$row['x'];
$subArray[y]=$row['y'];
$array[]= $subArray ;}
echo'{"ProductsData":'.json_encode($array).'}';
$rows = array();while($r = mysqli_fetch_array($result,MYSQL_ASSOC)){
$row_array['result']= $r;
array_push($rows,$row_array);// here we push every iteration to an array otherwise you will get only last iteration value}
echo json_encode($rows);
json_encode()
w odpowiedzi poniżej. Prosty i działa jak urok! stackoverflow.com/questions/1390983/…Odpowiedzi:
Ta funkcja
json_encode
wymaga PHP> = 5.2 i pakietu php-json - jak wspomniano tutajUWAGA :
mysql
jest przestarzałe od PHP 5.5.0,mysqli
zamiast tego użyj rozszerzenia http://php.net/manual/en/migration55.deprecated.php .źródło
AS
do zmiany nazwy kolumn na coś publicznego, na przykładSELECT blog_title as title
jest to czystsze, a społeczeństwo nie wie, jakie dokładnie kolumny pochodzą z bazy danych.Wypróbuj to, spowoduje to prawidłowe utworzenie obiektu
źródło
http://www.php.net/mysql_query mówi „
mysql_query()
zwraca zasób”.http://www.php.net/json_encode mówi, że może zakodować dowolną wartość „z wyjątkiem zasobu”.
Musisz iterować i zbierać wyniki bazy danych w tablicy, a następnie
json_encode
w tablicy.źródło
Dzięki temu bardzo mi pomogło. Mój kod:
źródło
Dzięki .. moja odpowiedź brzmi:
źródło
Z mojego doświadczenia wynika, że powyższe nie zadziała, zanim nazwiesz element root w tablicy na coś, nie byłem w stanie uzyskać dostępu do niczego w ostatnim jsonie wcześniej.
To powinno wystarczyć!
Par
źródło
Poniższy kod działa tutaj dobrze!
źródło
Moja prosta poprawka, aby go zatrzymać, umieszczając znaki mowy wokół wartości liczbowych ...
źródło
Niestety, jest to bardzo długo po pytaniu, ale:
Po prostu:
źródło
GROUP_CONCAT()
jest ograniczony przezgroup_concat_max_len
.moglibyśmy uprościć odpowiedź Paolo Bergantino w ten sposób
źródło
aarray_push ($ rows, $ row_array); pomagają budować tablice, w przeciwnym razie daje ostatnią wartość w pętli while
działa to jak metoda dołączania StringBuilder w Javie
źródło
Jeszcze jedna opcja za pomocą pętli FOR:
Jedyną wadą jest to, że pętla dla jest wolniejsza niż np. Podczas lub szczególnie w przypadku Foreach
źródło
Na przykład $ wynik = mysql_query („WYBIERZ * Z profili użytkowników, gdzie NAZWA =„ TESTUSER ””);
1.) jeśli wynik $ to tylko jeden wiersz.
2.) jeśli wynik $ jest większy niż jeden wiersz. Musisz iterować wiersze i zapisać je w tablicy, a następnie zwróci json z tablicą.
źródło
Mam takie same wymagania. Chcę tylko wydrukować obiekt wynikowy w formacie JSON, więc używam poniższego kodu. Mam nadzieję, że coś w tym znajdziesz.
źródło
Sprawdź poniższy kod, aby użyć mysql_fetch i json_encode. Będziesz musiał powtarzać wiersze, ale jeśli użyjesz mysqli, sytuacja się zmieni
źródło
Tak rozwiązałem
To zostanie zwrócone do ajax jako zestaw wyników i przy użyciu parsowania json w części javascript w następujący sposób:
źródło
źródło
Kod:
źródło
tak proste jak to :-)
źródło
źródło