Problem z przetworzeniem odpowiedzi MySQL

0

Witam,

Sytuacja jest następująca: odpowiedź dla pewnego zapytania zwraca 3 rekordy w przypadku użycia mysql_fetch_array() w pętli while(). Gdyby mysql_fetch_array() wykonać bez pętli zwróci tylko jeden (pierwszy) rekord - to oczywiste. Mam skrypt w jQuery, który przy pomocy metody $.ajax wykonuje zewnętrzny skrypt (właśnie powyższe zapytanie) i odpowiedź, która jest tablicą konwertuje do JSON i wysyłam z powrotem do jQuery. Problem pojawia się wlaśnie kiedy mam trzy rekordy. Wiadomo - w pętli while za każdym "obrotem" nie mam dostępu do poprzedniego rekordu. Czy musze w tej sytuacji w pętli while dopisywać kolejne rekordy do nowej, pomocniczej tabeli (dwuwymiarowej?) i wtedy dopiero konwertować do JSON ? Jak to rozgryźć?

0

A dlaczego dwuwymiarowej? Jeden wymiar tabeli pomocniczej w zupełności wystarczy :)

$data = array();
while ($row = mysql_fetch_assoc($result)) {
  $data[] = $row;
}
echo json_encode($data);
0

Ale jak w/w metoda Cię nie zadowala i potrzebujesz jednak wszystkich rekordów za jednym zamachem, to poprzez PDO i funkcję fetchAll.

0

Znalazłem w dokumentacji PHP taką konstrukcję:

while( ($resultArray[] = mysql_fetch_assoc($sql) ) || array_pop($resultArray) ); 

I działa ;-) Niemniej dzięki za pomoc :) Na marginesie - jestem początkujący i powyższy przypadek while jest mi nieznany, czy ktoś wytłumaczy co tu się dzieje?

1

mysql_fetch_assoc dodaje do tablicy resultArray kolejny pobrany rekord, bądź też false, jeśli rekordów do pobrania już nie ma. Jako, że jest to po lewej stronie operatora ||, zostaje konwersja na wartość logiczną true bądź false. W momencie gdy jest true, nie wykonuje się prawa część operatora ||. I teraz sytuacja gdy nie ma rekordów do pobrania: mysql_fetch_assoc zapisuje do tablicy wartość false. Jest to wartość niepożądana. Sprawdzana jest prawa instrukcja operatora ||, która usuwa ów false z tej tablicy (usuwa ostatni element) i go zwraca. Cała instrukcja while w tym momencie jest fałszywa i php przechodzi dalej :)

0
pan kuba napisał(a)

mysql_fetch_assoc dodaje do tablicy resultArray kolejny pobrany rekord, bądź też false, jeśli rekordów do pobrania już nie ma. Jako, że jest to po lewej stronie operatora ||, zostaje konwersja na wartość logiczną true bądź false. W momencie gdy jest true, nie wykonuje się prawa część operatora ||. I teraz sytuacja gdy nie ma rekordów do pobrania: mysql_fetch_assoc zapisuje do tablicy wartość false. Jest to wartość niepożądana. Sprawdzana jest prawa instrukcja operatora ||, która usuwa ów false z tej tablicy (usuwa ostatni element) i go zwraca. Cała instrukcja while w tym momencie jest fałszywa i php przechodzi dalej :)

Dzięki za lekcje ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1