Problem z przetworzeniem odpowiedzi MySQL

Odpowiedz Nowy wątek
2011-07-26 15:03
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źć?

Pozostało 580 znaków

2011-07-26 15:13
pan kuba
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);

Pozostało 580 znaków

2011-07-26 15:26
pan kuba
0

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

Pozostało 580 znaków

2011-07-26 15:27
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?

Pozostało 580 znaków

2011-07-26 15:54
pan kuba

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 :)

Pozostało 580 znaków

2011-07-28 11:25
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 ;)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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