Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PDO i num_rows .
nekomata
post
Post #1





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

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


Postanowiłem przenieść się z mysqli n PDO za sugestią z tego tematu i właśnie uaktualniam moje skrypty.Jednak mam takowy problem.. mam taki kodzik
  1. $avatar = $dbc->prepare('SELECT img3030 FROM avatars WHERE nick=? LIMIT 1');
  2. $avatar->execute(array($_GET['user']));
  3. if($avatar->rowCount() > 0){
  4. while($row=$avatar->fetch(PDO::FETCH_ASSOC)){
  5. echo 'znaleziono';
  6. /*header('Content-type: image/png');
  7. $img = imagecreatefromstring($row[$type]);
  8. imagepng($img);*/
  9. }
  10. }
  11. else{
  12. echo 'Nieznaleziono';
  13. /*header('Content-type: image/png');
  14. $image = imagecreatefrompng('../style/img/noavatar.png');
  15. imagepng($image);*/
  16. }
Właśnie z tym rowCount jest problem bo nie działa tak jak powinien.(albo ja go nie używam jak powinienem) , czy jest jakaś alternatywa w PDO która działałaby tak jak mysqli_num_rows?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
gregory90
post
Post #2





Grupa: Zarejestrowani
Postów: 9
Pomógł: 1
Dołączył: 3.10.2009

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


http://php.net/manual/en/pdostatement.rowcount.php
"If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications. "
Go to the top of the page
+Quote Post
nekomata
post
Post #3





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

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


Mhmm czyli zostaje mi puścić while z fetchem i dodawać do zmiennej?Dla uściślenia mam na myśli coś takiego
  1. function getPDOrow($statement){
  2. $i = 0;
  3. while($row=$statement->fetch(PDO::FETCH_ASSOC)){
  4. $i++;
  5. }
  6. return $i;
  7. }
Chociaż wolałbym się obejść bez takich "hacków" , jakieś inne propozycje?

===EDIT===

A więc tak kombinowałem z powyższym pomysłem funkcji... i wychodzi na to że do sprawdzenia muszę dwa razy odpalać zapytanie do bazy , czyli aby funkcja działała muszę uzyć czegoś takiego
  1. function getPDOrow($statement,$array){
  2. $i = 0;
  3. $statement->execute($array);
  4. while($row=$statement->fetch(PDO::FETCH_ASSOC)){
  5. $i++;
  6. }
  7. return $i;
  8. }
Tylko takie coś jest trochę nieoptymalne czyż nie?

Ten post edytował nekomata 12.04.2011, 19:49:26
Go to the top of the page
+Quote Post
Smertius
post
Post #4





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

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


  1. $row=$statement->fetch(PDO::FETCH_ASSOC);
  2. $rowCount=count($row);


BTW $statement->fetch(PDO::FETCH_ASSOC); zwróci Ci zawsze jeden rekord w twoim wypadku powinno być raczej $statement->fetchAll(PDO::FETCH_ASSOC)
Go to the top of the page
+Quote Post
nekomata
post
Post #5





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

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


Mhmmm , ale tak czy siak z taką funkcją , zapytanie jest wykonywane 2 razy... ma ktoś pomysł by poradzić sobie tylko jednym zapytaniem?
Go to the top of the page
+Quote Post
Zyx
post
Post #6





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Co temat ma wspólnego z programowaniem obiektowym? PDO, w przeciwieństwie do starszych sterowników, nie buforuje listy wyników w pamięci, tylko pobiera elementy na bieżąco. I nie trzeba znać liczby zwróconych wierszy, by stwierdzić czy coś zostało pobrane...

  1. $found = false;
  2. while($row = $stmt->fetch(PDO::FETCH_ASSOC))
  3. {
  4. $found = true;
  5. // jakis kod
  6. }
  7. $stmt->closeCursor();
  8. if(!$found)
  9. {
  10. // nie znaleziono...
  11. }
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #7





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Przenoszę oczko wyżej
Go to the top of the page
+Quote Post
nekomata
post
Post #8





Grupa: Zarejestrowani
Postów: 314
Pomógł: 44
Dołączył: 12.11.2010
Skąd: UK

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


Dzięki za pomoc , trochę mi to rozjaśniło w głowie.. wychodzi na to że wziąłem rowCount() jakos _num_rows , a tak naprawdę to jest _affected_rows. thx.
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: 25.08.2025 - 01:28