![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Próbuję pojąć PDO. We wszystkich tutoriali w necie wynika, że ile razy wykonujemy zapytanie - tyle razy należy się łączyć z bazą danych... Wydaje mi się, że raczej tak nie jest bo to byłoby niewygodne. Czy wykonanie takiego kodu:
RAZ wystarczy, aby nawiązać połączenie, a potem można się już swobodnie odwoływać do zmiennej $db, np:
? Czy raczej powinienem to zapisać tak:
czyli co zapytanie, powtarzać cały scenariusz dot. łączenia się z bazą, wykonywania zapytań, zwracania ew. błędów itd. ? Ten post edytował Majkelo23 23.10.2013, 07:19:31 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Nie wiem jakie ty tutki czytasz, ale moze czas przerzucic sie na inne?
![]() Z baza masz sie laczyc raz, a potem korzystac z tego polaczenia gdzie ci sie podoba Identycznie jak ze starym poczciwym mysql_connect, ktore robi sie raz a nie za kazdym razem gdy chce sie wykonac zapytanie -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO
Zauważ, że nie ma tam nigdzie przykładu, gdzie łączymy się z bazą danych, a później operujemy na tym jednym połączeniu. Cały czas jest sztywny scenariusz:
No, ale skoro jest jak mówisz to super ![]() Mam jeszcze jedno pytanie - mam dwie klasy: - db, - users. Klasa db wygląda tak:
czyli łączy się z bazą danych, natomiast klasa users rozpoczyna się tak:
czyli tworzę nowy obiekt klasy db pod zmienną $db. Potem poniżej w kodzie jednej z metod, próbuję się do tego odwołać tak:
Otrzymuję: Fatal error: Call to a member function exec() on a non-object in /home/majkelo/public_html/OOP/includes/users.class.php on line 50 Możesz mnie uświadomić, gdzie robię jakiś głupi błąd? Ten post edytował Majkelo23 23.10.2013, 07:40:25 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Zauważ, że nie ma tam nigdzie przykładu, gdzie łączymy się z bazą danych, a później operujemy na tym jednym połączeniu. Cały czas jest sztywny scenariusz: Koles poprostu pisal kazdy kod jako oddzielny kawalek, by kazdy mogl sobie odpalic kazdy kod bez zastanawiania sie czemu nie dziala. A niestety jest cala masa geniuszy, ktorzy by wzieli trzeci kod bez zrobienia polaczenia, ktore bylo w pierwszym kodzieCo do bledu: 1)Zajrzyj do manuala i poczytaj o zasiegu zmiennych. 2)Albo skoro uzywasz klas i obiektow to zainteresuj sie $this 3) No i pozatym dla obietku user masz przekazac gotowy obiekt $db a nie tworzyc go od nowa. Dzieki temu taki obiekt mozesz przekazac roznym klasom a nie dla kazdej klasy tworzyc db od nowa. ad1) http://php.net/manual/pl/language.variables.scope.php ad2) http://www.php.net/manual/en/language.oop5.basic.php http://www.php.net/manual/en/language.oop5.properties.php -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
o całym OOP czytam od wczoraj, także cudów się nie spodziewałem.
Zapomniałem dodać, że przed całym zapisem:
jest includowany plik db.class.php. Co do $this, to wiem, że wskazuje zawsze na obiekt, na którym daną metodę wywołujemy. Jednak nie rozumiem tego zdania z Twojej wypowiedzi: Cytat 3) No i pozatym dla obietku user masz przekazac gotowy obiekt $db a nie tworzyc go od nowa. Dzieki temu taki obiekt mozesz przekazac roznym klasom a nie dla kazdej klasy tworzyc db od nowa. a z pozoru wygląda całkiem ciekawie, więc czy mógłbyś mi jeszcze zaprezentować jakiś przykład dot. tego co wyżej zacytowałem (chociażby z manuala) ? Bo kompletnie nie wiem o czym mówisz, a może wiem, ale nie potrafię się domyślić, bazując na tym co napisałeś. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Gdzie user wyglada tak:
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko spoko, ale moja tępota w temacie OOP nadal robi swoje...
![]() db.class.php:
common.php:
index.php:
i część klasy users.class.php:
efekt wywolania index.php: Fatal error: Call to undefined method db::exec() in /home/majkelo/public_html/OOP/includes/users.class.php on line 50 Co znowu pomyliłem? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 467 Pomógł: 77 Dołączył: 6.09.2008 Skąd: Miechów / Kraków Ostrzeżenie: (0%) ![]() ![]() |
Może dlatego, że klasa db nie ma takiej metody. Wywołanie exec powinno zostać wywołane na obiekcie PDO, a nie db.
Tak jak pisał @nospor poczytaj o zasięgu zmiennych. -------------------- Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.
https://www.aroch.pl https://themeforest.net/user/aroch https://www.astroblog.aroch.pl https://www.4geeks.pl |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Tak napisal freemp3 klasa DB nie ma metody EXEC.
Poza tym, tworząc obiekt PDO w klasie DB, to tez masz go przypisywac do $this->db, w przeciwnym wypadku stracisz go. Zamiast brac sie za pisanie skryptow przy pomocy klas, to wez zapoznaj sie wpierw z podstawaami klas, popisz rozne przyklady, potem skacz do glebokiej wody. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Strasznie skomplikowane. Przecież, abym mógł wykonać zapytanie do bazy danych, muszę operować na połączeniu z bazą z klasy db. Z kolei klasa db nie posiada metody exec, bo posiada ją klasa pdo.
Tak więc powinienem odwołać się do klasy db, a dopiero z klasy db kierować się do pdo i operując już na klasie pdo, odwołać się do metody exec... ? $this->db->pdo->exec() ? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 467 Pomógł: 77 Dołączył: 6.09.2008 Skąd: Miechów / Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Strasznie skomplikowane Uwierz mi, że jest to proste. Trzeba tylko poznać zasady działania klas, komunikacji między nimi i zasięgu zmiennych. Bez tej wiedzy nie ma się co zabierać za klasy. Dobrze było by też poznać wzorce takie jak singleton i rejestr. W przypadku baz danych są bardzo przydatne. Cytat $this->db->pdo->exec() Możesz tak zrobić, ale w tedy w klasie db powinno się znaleźć pole pdo i tworząc połączenie rezultat powinien być zapisany właśnie w nim:
Ten post edytował freemp3 23.10.2013, 10:22:37 -------------------- Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.
https://www.aroch.pl https://themeforest.net/user/aroch https://www.astroblog.aroch.pl https://www.4geeks.pl |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Cóż, spotkałeś się z jakimiś stronami, gdzie te wątki były poruszone, a nie tylko 'cmoknięte' na sucho dwa zdania i jeden przykład?
EDIT: To co podałeś działa świetnie, dzięki. Ale i tak wnioskuję po tym wszystkim, że nic z tego nie rozumiem, czas chyba cofnąć się do żmudnej teorii. Ten post edytował Majkelo23 23.10.2013, 10:26:28 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 467 Pomógł: 77 Dołączył: 6.09.2008 Skąd: Miechów / Kraków Ostrzeżenie: (0%) ![]() ![]() |
Pierwsze dwa z brzegu:
http://pl.wikibooks.org/wiki/PHP/Klasy_i_obiekty http://php.net/manual/pl/book.classobj.php Poza tym ćwiczyć i jeszcze raz ćwiczyć. Drobnymi kroczkami, bez rzucania się od razu na głęboką wodę. -------------------- Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.
https://www.aroch.pl https://themeforest.net/user/aroch https://www.astroblog.aroch.pl https://www.4geeks.pl |
|
|
![]() ![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 332 Pomógł: 22 Dołączył: 6.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Zapoznaj się też z innym rodzajem połączenia.
np takim
zobacz jakie są różnice pomiędzy jednym a drugim tutaj link do całości sposób wywołania http://www.phpclasses.org/browse/file/47183.html -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 5.07.2025 - 00:16 |