Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pobieranie pojedyńczego wyniku przy pomocy PDO
Forum PHP.pl > Forum > Bazy danych
jolam
Po nocnych zmaganiach z PDO potrafię robić proste zapytania SELECT, INSERT, UPDATE czyli prawie wszystko czego potrzebowałam . Jedynie nie potrafię zrobić odpowiednika sqlite_fetch_single
W manualau jest jedynie coś takiego:

  1. <?php
  2. $db = new PDO('mysql:host=localhost;dbname=pictures','user','password'); //1
  3. $pics = $db->query('SELECT COUNT(id) FROM pics'); //2
  4. $this->totalpics = $pics->fetchColumn(); //3
  5. $db = null;//4
  6. ?>


Ten kod, który wkleiłam jest dla mnie mało czytelny, nie rozumiem go. A poza tym ten kod jest dużo dłuższy niż analogiczny w sqlite2, czyli więcej pisania

Może napisze co ja z tego rozumiem:

1 tworze połączenie z bazą danych

2 wysyłam zapytanie do bazy a wynik zapytania zapisuje pod zmienną $pics
czyli coś jak $query = sqlite_query( $base, $sqlstm )
i potem coś jak $res = sqlite_fetch_array( $query ) ale nie ma pętli while

3 niestety nic wstydnis.gif sadsmiley02.gif
czytałam o $this w http://pl.wikibooks.org/wiki/PHP/Wst%C4%99...nia_obiektowego ale po prostu tego nie rozumiem sad.gif

4 zamykam połączenie z bazą

Czy nie ma innej możliwości na pobranie pojedynczego wyniki?
Na swojej stronie dość często korzystam z zapytań, które mają zwrócić albo pojedynczy tekst albo cyfrę. Np pytam o parentid dla rekordu id=2598, albo pytam o name dla tego rekordu albo tak jak w przykładzie pytam ile jest rekordów spełniających jakiś warunek.

Bardzo proszę o pomoc gdyż nie umiem sama znaleźć rozwiązania
A nie chce używać czegoś nie wiedząc czym jest.

pozdrawiam Jola
Quantum
no tak, ale $this to używasz tylko w klasach, a tutaj musisz się odwołać tak: $obiekt-> ..oczywiscie jeśli wcześniej go utworzyłaś.
jolam
sniffer32 nie rozumiem tego, ten kod to mam z manuala i on działa Ale tak jak juz napisałam jest długi i nie rozumiem go.
sad.gif
wookieb
No to masz wileki problem skoro nie rozumiesz języka pisanego. Może lepiej zrezygnuj z programowania skoro nawet manual jest dla ciebie murem nie do przebicia.
http://pl2.php.net/manual/en/pdostatement.fetch.php
l3l0
Witam
Polecam manuala http://pl2.php.net/pdo

Jeden rekord można wybrać w ten sposób:
  1. $db = new PDO('mysql:host=localhost;dbname=pictures','user','password');
  2. $pics = $db->query('SELECT COUNT(id) FROM pics'); //methoda query zwraca obiekt PDOStatement
  3. $totalPics = $pics->fetch(PDO::FETCH_NUM); //wybieramy jeden rekord (pierwszy) zwrócony przez zapytanie możemy też użyć fetchAll żeby wybrać wszystkie rekordy zwrócone przez zapytanie

zmienna totalPics będzie tablicą numerowaną od zera (const FETCH_NUM) czyli wynik counta będzie dostępny w totalPics[0]

Pozdrawiam
jolam
wookieb jesteś bardzo denerwujący, nie pomagasz a przeszkadzasz tylko. Ciekawe czy ty tak od razu wszystkie wiedziałeś i rozumiałeś, pamięta wół jak cielęciem był?

l3l0 czyli $db->query('SELECT COUNT(id) FROM pics'); zwraca obiekt, który jest tablica tak? i dopiero z tej tablicy muszę pobrać pierwszy rekord? I to pobieranie pierwszego rekordu robię poprzez $totalPics = $pics->fetch(PDO::FETCH_NUM); czy tak? Jeśli tak to dlaczego, $pics nie jest po prostu zmienną ? przecież będzie zawierać tylko liczbę rekordów?

pozdrawiam Jola
Quantum
@jolam - proponuje najpierw nauczyć się podstaw OOP, bo bez nich nic z PDO nie zrozumiesz..

  1. $db = new PDO('mysql:host=localhost;dbname=pictures','user','password');
  2. $stmt = $db->query('jakies zapytanie');
  3. $stmt->execute();
  4. $stmt->fetch( ... );


w miejsce kropek podajesz sposób wydobywania danych możesz pozostawić puste, dla przykładu $stmt->fetch(PDO::FETCH_OBJ) zwróci nam obiekt, PDO::FETCH_ASSOC tablice i później zależnie od tego jak ustalisz wydobywujesz dane, przykład:

resztę znajdziesz w manualu z linku ~wookieb
  1. $db = new PDO('mysql:host=localhost;dbname=pictures','user','password');
  2. $stmt = $db->query('SELECT COUNT(id) as records FROM pics');
  3. $stmt->execute();
  4. $totalpics = $stmt->fetch(PDO::FETCH_OBJ);
  5. echo $totalpics->records;
  6.  
  7. //albo tablice asocjacyjna
  8. $totalpics = $stmt->fetch(PDO::FETCH_ASSOC);
  9. echo $totalpics['records'];


akurat w twoim przypadku najprościej będzie użyć FETCH::NUM, tak jak podał ~l3l0
dr_bonzo
@jolam:
Cytat
wookieb jesteś bardzo denerwujący, nie pomagasz a przeszkadzasz tylko. Ciekawe czy ty tak od razu wszystkie wiedziałeś i rozumiałeś, pamięta wół jak cielęciem był?

Nam sie po prostu nie chce tlumaczyc ci 10ty raz czegos co masz w necie w 100tkach tutoriali albo w ksiazkach.
Z tego co widze to nie chce ci sie przerobic OOP - a nie jest to proste zeby zaczaic to po jednym poscie na forum.
W dodatku podsuwamy ci rozwiazania/funckje ktorych masz uzyc, a potem w kodzie widzimy ze ich nie uzywasz.
jolam
dr_bonzo jak nie chcesz mi pomóc to po co się odzywasz? Żeby powiedzieć że nie chcesz? Przecież już mi to mówiłeś.
nie mów mi, że czegoś mi się nie chce, bo nic o tym nie wiesz. Cały czas próbuję zrozumieć OOP i czytam właśnie różne kursy, te które mi podałeś też. Niestety nie idzie mi to zbyt dobrze. Tak jak pisałam już udaje mi się wykonywać proste zapytania przy pomocy PDO jedynie wydobycie pojedynczej wartości mi nie wychodzi.

sniffer32 bardzo Ci dziękuję, niestety nie mogę powiedzieć żebym coś więcej zrozumiała, ale i tak bardzo dziękuję. Chyba pozostanę przy rozwiązaniu l3l0 choć i jego nie bardzo rozumiem, ale wydaje mi się jakieś prostsze. Choć to bardzo dziwne, że fetch() nie ma opcji single, tak abym wynik mogła od razu przypisać do jakiejś zmiennej. Zamiast tego ilość kodu i skomplikowanie tak bardzo wzrosło sad.gif

pozdrawiam serdecznie Jola
erix
Cytat
dr_bonzo jak nie chcesz mi pomóc to po co się odzywasz? Żeby powiedzieć że nie chcesz? Przecież już mi to mówiłeś.

Bez przesady, pomoc != gotowiec. Szanuj nas, my będziemy szanować Ciebie. Oczekujesz gotowca, a w tym wątku go na pewno nie dostaniesz, gdyż go zamykam.

I nie radzę spamować użytkowników przez PW.

Cytat
Zamiast tego ilość kodu i skomplikowanie tak bardzo wzrosło

Gdy się nie ma podstaw, to wszystko wydaje się skomplikowane. Najpierw przygotowujesz się teoretycznie z przepisów ruchu drogowego, dopiero potem siadasz z instruktorem za kółkiem, nie na odwrót.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.