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
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
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 ;] )
Go to the top of the page
+Quote Post
starach
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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
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ą...
Go to the top of the page
+Quote Post
starach
post
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Ludvik
post
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
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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
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)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 04:42