Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PDO] Dlaczego query zamiast obiektu zwraca mi boolean, Oraz jak metoda query może zwrócić obiekt klasy PDOStatement - proszę
starach
post 22.05.2007, 11:43:24
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Witam.
Zmieniam strukturę swojego CMS-a dostosowywując go do PDO.
Niestety przy wykonaniu:
  1. <?php
  2. $query = 'SELECT COUNT(n_id) AS count FROM `news` WHERE `lang`=''.USER_LANG.''';
  3. $result = $this->db->query($query);
  4. $row = $result->fetch(DB::FETCH_ASSOC);
  5. ?>

Pojawia się komunikat:
Fatal error: Call to a member function fetch() on a non-object in
Dodałem linijkę echo gettype($result);
żeby sprawdzić co zwraca mi zapytanie okazało się że wartość boolowską.
Już nie sprawdzałem ale jest to zapewne fałsz.
Dziwi mnie to bo zapytanie (po uprzednim wykonaniu echo $query) działa dobrze w PhpMyAdmin.
Co jest grane ?

Drugą sprawą jest to że chciałbym wiedzieć jak metoda query() zwraca obiekt klasy PDOStatement ?
Generalnie to chodzi o to jak w ogóle metoda zwracać może obiekt.
Prosiłbym o przykład bo zdaje się że z PDO będę miał więcej udręki niż pociechy i będę musiał poprawić swoją poprzednią klasę do obsługi połączeń z bazą danych. ( poza tym zdaje się nie będę mógł dodać do metody query() zliczania ilości zapytań co też mnie frustruje ) Bardzo bym prosił o szybką odpowiedź.
Go to the top of the page
+Quote Post
Kicok
post 23.05.2007, 10:17:54
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Dopisz sobie jeszcze kod, który wyświetli błąd zwrócony przez bazę danych w przypadku błędnego zapytania. Ja z tym przypadku stawiam na alias: count.
"count" jest słowem kluczowym, więc jeśli chcesz go użyć jako nazwy kolumny/tabeli/aliasu to musisz umieścić go w odwróconych apostforach `count` (Przynajmniej dla bazy danych MySQL. W MSSQL będą to nawiasy kwadratowe: [count] a w przypadku innych baz sam nie wiem co ;] )


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
starach
post 23.05.2007, 10:24:28
Post #3





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Ale ja chce pobrać ilość reordów z bazy właśnie przy pomocy słowa kluczowego count tongue.gif co widać aha nie widać bo nie podałem tutaj zapytania. Przepraszam, mea kulpa. $query = 'SELECT COUNT(n_id) AS count FROM `news` WHERE `lang`=\''.USER_LANG.'\'';
Go to the top of the page
+Quote Post
Jabol
post 23.05.2007, 10:27:53
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

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


chodzi o część
  1. AS count
zamień to na np:
  1. AS newscount
albo na:
  1. AS `count`
Go to the top of the page
+Quote Post
Sedziwoj
post 23.05.2007, 13:05:08
Post #5





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


lub na :
  1. AS "count"

(PG)

ale lepiej nie używać słów kluczowych, wtedy przy zmianie bazy nie trzeba będzie poprawiać "ciapków"

P.S. chyba nie ma to wiele wspólnego z obiktowością...


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
starach
post 23.05.2007, 15:06:40
Post #6





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Ale ze mnie 'ciapek'.
Nie zwróciłem uwagi na to ... swoją drogą wie ktoś dlaczego przy wysyłaniu zapytania przez mysqli_query wszystko jest ej oł kej, a przez PDO::query() odwala mu ? Poprawiłem już właściwie swoją własną klasę (tylko 5 godzin roboty) ona mi przynajmniej przez wyjątek od razu wywala że zapytanie jest niepoprawne tongue.gif
Go to the top of the page
+Quote Post
Ludvik
post 23.05.2007, 21:58:45
Post #7





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Cytat
Drugą sprawą jest to że chciałbym wiedzieć jak metoda query() zwraca obiekt klasy PDOStatement ?
Generalnie to chodzi o to jak w ogóle metoda zwracać może obiekt.
Prosiłbym o przykład bo zdaje się że z PDO będę miał więcej udręki niż pociechy i będę musiał poprawić swoją poprzednią klasę do obsługi połączeń z bazą danych. ( poza tym zdaje się nie będę mógł dodać do metody query() zliczania ilości zapytań co też mnie frustruje ) Bardzo bym prosił o szybką odpowiedź.

Metoda może zwracać cokolwiek, obiekty także. Tworzysz obiekt, zwracasz referencję. Jak chcesz zrobić licznik zapytań, to po prostu stwórz klasę dziedziczącą po PDO i nadpisz metodę query, zapisując licznik (zwracając uwagę na nieudane zapytania...).


--------------------
Go to the top of the page
+Quote Post
starach
post 23.05.2007, 23:04:14
Post #8





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Cytat
Metoda może zwracać cokolwiek, obiekty także.
Tak wiem sprawdziłem po tym jak to napisałem tongue.gif
Cytat
Jak chcesz zrobić licznik zapytań, to po prostu stwórz klasę dziedziczącą po PDO i nadpisz metodę query, zapisując licznik
Nie podoba mi się pomysł dziedziczenia po klasie której struktury nie mogę sprawdzić.
Go to the top of the page
+Quote Post
Ludvik
post 24.05.2007, 07:48:24
Post #9





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Cytat
Nie podoba mi się pomysł dziedziczenia po klasie której struktury nie mogę sprawdzić.

Na pewno będzie to wygodniejsze i mnie pracochłonne niż wkomponowanie instancji obiektu PDO w inny. Poza tym nie widzę nic złego w dziedziczeniu z klasy, której nie znamy wewnętrznej struktury. Przecież wystarczy interfejs, żeby dołożyć warstwę kontroli na wywoływaną metodę.


--------------------
Go to the top of the page
+Quote Post
Sedziwoj
post 24.05.2007, 08:28:55
Post #10





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Do tego to jest chyba jedne z ważniejszych założeń programowania obiektowego, hermetyzacja. Wiedząc jaki ma interfejs możesz już korzystać. (kłopoty są czasem jak jest kiepski opis, lub to co korzystamy ma jakieś błędy)


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 19:57