Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PDO] pobieranie całej tablicy
Forum PHP.pl > Forum > Przedszkole
jafet
Chciałbym pobierać dane z kursorów do jednej tablicy asocjacyjnej. Bez PDO było to proste, klasa zwracała zapytania a potem np funckją mysql_fetch_row pobierałem każdy wiersz. W PDO nie mogę w innym miejscu pobierać po jednym wierszu z kursora bo muszę w klasie z zapytaniem zamknąć ten kursor. Więć klasa z zapytaniem musi mi od razu wszystko zwrócić. Jest w PDO funkcja fetchAll() ale ona zwraca to w dziwny sposób: Array ( [0] => Array ( [id] => 1 [0] => 1 [nazwa] => przyroda [1] => przyroda ) [1] => Array ( [id] => 2 [0] => 2 [nazwa] => motory / samochody [1] => motory / samochody ) ). A dodam że tabela to tylko: id, nazwa. Czy ktoś wie jak to zwrócić, by potem móc se jak człowiek odczytać foreach ($dane as $id => $nazwa)questionmark.gifquestionmark.gif
nospor
Cytat
Jest w PDO funkcja fetchAll() ale ona zwraca to w dziwny sposób: Array ( [0] => Array ( [id] => 1 [0] => 1 [nazwa] => przyroda [1] => przyroda ) [1] => Array ( [id] => 2 [0] => 2 [nazwa] => motory / samochody [1] => motory / samochody ) ). A dodam że tabela to tylko: id, nazwa.

Ona zwraca ci oprócz indexow bedacych nazwami kolumn, rowniez indexy liczbowe, w kolejnosci wystepowania kolumn. Jest tak domyslnie. jak chcesz miec tylko indexy nazw kolumn, musisz wywolac tę matodę z odpowiednim parametrem.Ale to wszystko jest w manualu....
http://pl.php.net/manual/pl/function.pdost...nt-fetchall.php
jafet
Cytat(nospor @ 2006-05-09 11:34:19)
jak chcesz miec tylko indexy nazw kolumn, musisz wywolac tę matodę z odpowiednim parametrem.Ale to wszystko jest w manualu....

Ale chciałbym mieć w tej tablicy indeksy i nazwy... Mogę se poradzić oczywiście mając tylko nazwy ale mam też takie funkcje gdzie chciałbym mieć kilka pól z tabeli...

Chyba że jakoś wyławiać dane z tej ich dziwnej tabeli z dodtakowymi indeksami...
Ale jeśli to jedyny sposób to w takim razie PDO jest jeszcze nieprzemyślane i niedopracowane.
nospor
Cytat
Ale chciałbym mieć w tej tablicy indeksy i nazwy
blink.gif
No przecierz masz. masz indexy bedące nazwami pol, masz i indexy bedące liczbami kolejnosci kolumn.
Co ty chcesz miec?
jafet
Cytat(nospor @ 2006-05-09 11:53:56)
No przecierz masz. masz indexy bedące nazwami pol, masz i indexy bedące liczbami kolejnosci kolumn.
Co ty chcesz miec?

Przepraszam nospor za nieprecyzyjność smile.gif Mam tabelę zainteresowania(id, nazwa).
Z niej chcę mieć id i nazwę w tablicy asocjacyjnej. Liczby które są kolejnością nazw które dostaję robiąc Twoim sposobem fetchAll(PDO::FETCH_COLUMN, 1) są o jeden mniejsze niż pole id z tabeli. To nie jest taki problem dodać jeden przy przetwarzaniu ale... Chodzi mi o to, żeby to rozwiązać w przypadku gdy będę miał więcej pól. Jak dostać wtedy przyjemną tablicę albo jak wyłowić z tej otrzymanej z fetchAll() potrzebne dane?questionmark.gif

Mam nadzieję teraz dokładniej napisałem.
nospor
ja cie nie proponowalem PDO::FETCH_COLUMN smile.gif
swoją drogą PDO::FETCH_COLUMN zwraca ci tablice, ktorej wartosciami są wartosci kolejnych rekordow z danej kolimny, a indexami sa liczby od 0 do iloscwynikow-1. Index ma sie nijak w tym przypadku do twojego ID. ID masz w wartosciach tablicy a nie w jej indexach.

MI chodzilo, ze domyslnie masz PDO::FETCH_BOTH.

edit: luknij na przyklady w manualu, amoze ci sie rozjasni
jafet
Cytat(nospor @ 2006-05-09 12:10:00)
Index ma sie nijak w tym przypadku do twojego ID. ID masz w wartosciach tablicy a nie w jej indexach.

MI chodzilo, ze domyslnie masz PDO::FETCH_BOTH.

edit: luknij na przyklady w manualu, amoze ci sie rozjasni

Chodziło mi, że akurat w tym przypadku indeksy są o jeden mniejsze od ID.

Właśnie przeglądam te przykłady i chyba wezmę tę wersję z fetchAll()
  1. <?php
  2.  
  3. (
  4. [0] => Array
  5. (
  6. [nazwa] => trekking
  7. [0] => trekking
  8. [id] => 1
  9. [1] => 1
  10. )
  11.  
  12. [1] => Array
  13. (
  14. [nazwa] => przyroda
  15. [0] => przyroda
  16. [id] => 2
  17. [1] => 2
  18. )
  19. )
  20. ?>


i będę wyławiał pola nazwa i id. Jednak nadal twierdzę, że to jest niedopracoane jakieś tongue.gif

Dzięki za pomoc.
nospor
Cytat
Chodziło mi, że akurat w tym przypadku indeksy są o jeden mniejsze od ID.
a jakby ci sie ID zaczynalo od 100, to bys napisal ze index rozni się o 100? A co jesli id byloby stringiem? To o ile index by sie roznil od ID? Taki przyklad jest w manualu. Mowie ci jeszcze raz. Indexy, przy PDO::FETCH_COLUMN jest to zwykla numeracja od 0 do iloscwynikow-1, ktora nijak ma sie do wartosci w tabeli. Jest to tak przyjeta numeracja.
jafet
Cytat(nospor @ 2006-05-09 12:25:37)
a jakby ci sie ID zaczynalo od 100, to bys napisal ze index rozni się o 100? A co jesli id byloby stringiem? To o ile index by sie roznil od ID? Taki przyklad jest w manualu. Mowie ci jeszcze raz. Indexy, przy PDO::FETCH_COLUMN jest to zwykla numeracja od 0 do iloscwynikow-1, ktora nijak ma sie do wartosci w tabeli. Jest to tak przyjeta numeracja.

Rozumiem. Zrezygnowałem z takiej wersji. To początkowa desperacja winksmiley.jpg
nospor
Tak sie rozgadalismy na temat tych indexów, ze calkowicie ci zapomnialem powiedziec co i jak, gdyz ty niedolukales wszystkiego.

Cytat
Właśnie przeglądam te przykłady i chyba wezmę tę wersję z fetchAll()
i będę wyławiał pola nazwa i id. Jednak nadal twierdzę, że to jest niedopracoane jakieś

http://pl.php.net/manual/pl/function.pdostatement-fetch.php
PDO::FETCH_ASSOC zwroci ci tylko indexy z nazwami pol.
Uwierz, to jest dopracowane (pod tym kątem) winksmiley.jpg
jafet
Cytat(nospor @ 2006-05-09 13:36:15)
Tak sie rozgadalismy na temat tych indexów, ze calkowicie ci zapomnialem powiedziec co i jak, gdyz ty niedolukales wszystkiego.

http://pl.php.net/manual/pl/function.pdostatement-fetch.php
PDO::FETCH_ASSOC zwroci ci tylko indexy z nazwami pol.
Uwierz, to jest dopracowane (pod tym kątem) winksmiley.jpg

Też właśnie wziąłem FETCH_ASSOC zanim przeczytałem Twoją odp. Ale... To też nie do końca to co chciałem, bo trzeba przelatywać przez cały kursor i dokładać do tablicy każdy rekord. Bo funkcja fetch pobiera zawsze tylko jeden rekord. Chyba jednak nie ma czegoś takiego w PDO, żeby jednym poleceniem stworzyć tablicę asocjacyjną z wszystkich rekordów pobierając np 2 zadane pola... smile.gif
Chyba jestem wybredny tongue.gif

  1. <?php
  2. $zainteresowania = array();
  3. $stmt = $this -> db -> query('SELECT id, nazwa FROM zainteresowania');
  4.  
  5. while($row = $stmt -> fetch(PDO::FETCH_ASSOC))
  6. {
  7. array_push($zainteresowania, $row);
  8. }
  9.  
  10. $stmt -> closeCursor();
  11.  
  12. return $zainteresowania;
  13. ?>
nospor
oj.....
w linku do fetchall, jest napisane, ze lista wszystkich dostepnych flag jest w fetch()
co oznacza, ze lecisz do fetch(), patrzysz jakie tam są flagi, i uzywasz ich w fetchall()

dobra rada na dzis:
spojrz w moj podpis
smile.gif

edit: poziom Twoich kolejnych "problemów" zmusza mnie do przeniesienia topicu na wlasciwe miejsce winksmiley.jpg
jafet
Cytat(nospor @ 2006-05-09 15:15:54)
dobra rada na dzis:
spojrz w moj podpis
smile.gif

Kurde, to się nazywa analfabetyzm wtórny.

To jest nauczka na całe życie, żeby nie łowić słowa klucze z maualna ale czytać od początku do końca.

Dzięki wielkie Nospor i sorry za kłopot.

Pozdro
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.