Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PDO] pobieranie całej tablicy
jafet
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 26.09.2004
Skąd: Białystok

Ostrzeżenie: (0%)
-----


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

Ten post edytował nospor 9.05.2006, 16:31:52


--------------------
IT Pracownia Strony Joomla
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
jafet
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 26.09.2004
Skąd: Białystok

Ostrzeżenie: (0%)
-----


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.


--------------------
IT Pracownia Strony Joomla
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
jafet
post
Post #5





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 26.09.2004
Skąd: Białystok

Ostrzeżenie: (0%)
-----


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.


--------------------
IT Pracownia Strony Joomla
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
jafet
post
Post #7





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 26.09.2004
Skąd: Białystok

Ostrzeżenie: (0%)
-----


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.

Ten post edytował jafet 9.05.2006, 13:22:25


--------------------
IT Pracownia Strony Joomla
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
jafet
post
Post #9





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 26.09.2004
Skąd: Białystok

Ostrzeżenie: (0%)
-----


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


--------------------
IT Pracownia Strony Joomla
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
jafet
post
Post #11





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 26.09.2004
Skąd: Białystok

Ostrzeżenie: (0%)
-----


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


--------------------
IT Pracownia Strony Joomla
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
jafet
post
Post #13





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 26.09.2004
Skąd: Białystok

Ostrzeżenie: (0%)
-----


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


--------------------
IT Pracownia Strony Joomla
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 09:06