![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Hej
![]()
I teraz chodzi mi o pobieranie danych, czy za każdym razem muszę robić osobno takie coś:
W tym kodzie powyżej pobieram nazwę kategorii, a teraz jakbym chciał pobrać podkategorie z innej tabeli, to muszę na nową stworzyć to samo, tyle że, ze zmienionymi danymi, czyli:
Czy można to zrobić w jakiś inny sposób? Polskie nazewnictwo funkcji stosuję tylko w celach pokazowych ![]() Ten post edytował ExPlOiT 25.04.2009, 10:50:23 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zrób sobie jedna metode do pobierania danych z zapytania.
coś ala
-------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem coś na podobę jak napisałeś:
I wszystko ładnie pięknie pobiera itp, ale wyświetla mi tylko jeden rekord!Dlaczego? Ten post edytował ExPlOiT 25.04.2009, 11:10:39 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Kod foreach($sqli->dane("select kategoria from kategorie") as $key) Tak nie rob bo przy kazdym obruceniu sie petli bedzie sie to zapytane wykonywalo
zobacz co będzie. -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
ponieważ element kategoria jest nadpisywany az do ostatniego
http://pl2.php.net/manual/pl/mysqli-stmt.fetch.php#83284 zobacz to -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Czarowałem i wymyśliłem coś takiego:
Wynik daje taki jaki chcę czyi: Cytat Biznes i Ekonomia Blogi Internetowe Domy i Nieruchomo?ciEdukacja i Nauka Firmy wg. Bran? Handel Elektroniczny Handel Tradycyjny Hobby Katalogi Stron / Firm Komputery i Internet Kultura i Sztuka Medycyna Motoryzacja Muzyka Og?oszenia, AukcjeRegionalne Rozrywka Sport i Turystyka Szko?y i Uczelnie Telefonia Zdrowie i Uroda Zwierz?ta I teraz jest wszystko ładnie i pięknie he he, podany przykład pobiera tylko jedną kolumne z bazy, a co w wypadku pobierania kilku kolumn? Wiem że mogę to zrobić tak:
A jest jakiś bardziej optymalne rozwiązanie, żeby za każdym razem nie podawać ilości kolumn? Bo przykładowo mam w bazie tabele, podkategorie, a w niej kolumny, id, podkategoria i kategoria, i teraz musiałbym przebudować, trochę kod dane($query); Ten post edytował ExPlOiT 25.04.2009, 12:10:02 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Genralnie możesz zrobić sobie dwie metody: getRow(), getRows() które działają mniej więcej tak:
getRow(): wykonuje zapytanie zwraca fetchObject(); getRows(): deklarujesz sobie pustą tablicę wykonujesz zapytanie w pętli dopisujesz wynik fetchObject() jako kolejny element tablicy zwracasz tablicę |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
z getRow() to wymyśliłem coś takiego:
Tak jak pisałeś, wykonuje zapytanie i zwraca fetch_object() Z getRows() coś takiego wyczarowałem:
Fakt faktem zwraca id i nazwę kategorii ![]()
Ten post edytował ExPlOiT 25.04.2009, 13:00:35 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
W getRow() możesz ograniczyć się do
getRows() zrobiłeś dobrze z tym, że return powinno być po pętli while(), nie w jej środku. Ten post edytował Crozin 25.04.2009, 13:01:10 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
A z tym ograniczeniem w getRow() to nawet nie wiedziałem że tak można, teraz już na przyszłość będę wiedział
![]() W getRows() wstawiłem return poza pętle i pobiera wszystkie kategorie wraz z ID ![]() Teraz mi daje taki wynik:
czyli zadowalający i teraz rozumiem, że muszę przepuścić przez pętle tablice aby wyświetliło normalnie czyli id kategoria, a nie tak jak wyżej jest. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Działa super, tak jak chciałem. I mam jeszcze jedno pytanie co powinna zawierać klasa do obsługi bazy danych? Domyślam się że najlepiej wszystko do obsługi konkretnej bazy.
Kolejne pytanie: jak rozwiązać w klasie update,insert i delete, stworzyć osobne metody? Jak widać do wykonania zapytania używam takiego kodu:
I jedyne czym by się różniły metody, to komunikatem końcowym. Ten post edytował ExPlOiT 25.04.2009, 23:28:31 |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Działa super, tak jak chciałem. I mam jeszcze jedno pytanie co powinna zawierać klasa do obsługi bazy danych? Domyślam się że najlepiej wszystko do obsługi konkretnej bazy. Nie. Ona jest bardzo abstrakcyjna/uniwersalna. Nie działa z żadną konkretną bazą. Oferuje jedynie zestaw metod ułatwijących innym częściom kodu (modelom) korzystanie z bazy.Innymi słowy - lepiej korzystaj z PDO niż pisz własną klasę, bo to jest bez sensu - chyba, że robisz to jedynie w celach trenigowych |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Poczytam o PDO, w książce jest trochę o tym
![]() Klasę do obsługi bazy oczywiście piszę w celach treningowych, ponieważ na pisaniu czegoś najlepiej się uczyć, choćby dlatego że doświadczenie idzie nabyć podczas rozwiązywania takich problemów. Dokończyłem klasę update, select i insert dałem na tej zasadzie:
Teraz czas napisać jakiś logger, który zapisze zapytanie do pliku i czas wykonania ![]() Ten post edytował ExPlOiT 26.04.2009, 22:13:34 |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
No i to jest źle zrobione.
1) Po co mi takie komunikaty? 2) Jak wszystko poszło dobrze, to nie ma potrzeby niczego zwracać (może być zwykłe TRUE). Jak coś poszło źle to rzuć wyjątkiem, który nada się tu lepiej 3) Metody update/insert/delete to dobry pomysł w ORMach, ale w zwykłych "klasach obsługi baz danych" nie |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Cytat 3) Metody update/insert/delete to dobry pomysł w ORMach, ale w zwykłych "klasach obsługi baz danych" nie To co mogę zrobić w zwykłej klasie, zamiast insert etc... Cytat 1) Po co mi takie komunikaty? 2) Jak wszystko poszło dobrze, to nie ma potrzeby niczego zwracać (może być zwykłe TRUE). Jak coś poszło źle to rzuć wyjątkiem, który nada się tu lepiej Wiem, komunikaty dałem tylko tak żeby sprawdzić czy działa ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 21:18 |