Jak pobrać wiersze mulitiple za pomocą fetch (PDO :: FETCH_ASSOC) z pdo?

testQuery () to metoda, której używam do pobierania wszystkich wierszy z KATEGORII tabel

public function __construct()
 {
 self::$tdb = Database::getConnection();
 }



 #mock query to pull results from db
 public function testQuery()
  {
       $queryAA = "SELECT cat_name, cat_description, cat_id FROM CATEGORIES";
       $stmtAA = self::$tdb->prepare($queryAA);


       if ($stmtAA->execute() == true)
        {
             print("Execution was successful");
             return $stmtAA->fetch(PDO::FETCH_ASSOC);   
        }
       else
        {
            print("Warning statment did not successfully execute");
        }
     }

Zwykle używam fetchAll (), ale powiedziano mi, aby użyć fetch, ponieważ nie zajmuje tyle pamięci. Ale mam problem z pobraniem więcej niż jednego wiersza za pomocą fetch () i poniższego kodu.

$test = new test();
$results = $test->testQuery();


foreach ($results as $row)
 {
 print_r($row);
 }

Pobiera tylko 1 wiersz. Jak więc pobrać i wydrukować wiele wierszy? Wspomniano o iteracji, ale nie jestem pewien, czy ją wdrożę. Każda pomoc była by niezwykle cenna. Dzięki!

questionAnswers(2)

QuestionSolution

Możesz po prostu zwrócić obiekt instrukcji.
Lub jeśli chcesz go hermetyzować (aby można było go użyć tylko do pobrania danych), użyjIteratorIterator SPL

return new IteratorIterator($stmtAA);

wtedy możesz użyć

foreach( testQuery() as $row) { ... }

w twoim skrypcie.

 Francis Bailey24 sie 2012, 11:08
Idealny ^ to ten obiekt iteratora, który jest dla mnie nowy, muszę się temu przyjrzeć, ale dzięki za pomoc!

ale musisz iterować po wierszach, aż uzyskasz wszystkie dane.

Możesz to zrobić w pętli, aby uzyskać wszystkie dane:

$stmtAA->fetch(PDO::FETCH_ASSOC);

Coś takiego powinno załatwić sprawę:

while($row=$this->prepared->fetch(PDO::FETCH_ASSOC))
{
    $this->ID=$row['id'];
    $something=$row['something'];
}

W zależności od tego, czy zapełniasz zmienne, czy kod jest w obiekcie.

 Fluffeh30 sie 2015, 09:13
@Sajad Oczywiście. Możesz mieć wiele warunków wewnątrzwhile klauzula - choć jeśli używasz MySQL, sugerowałbym użycie alimit 0,10 klauzula na końcu zapytania, aby TYLKO zwrócić pierwsze dziesięć wierszy (zamówionych przez Ciebieorder by klauzula), która robi to samo tylko lepiej.
 Shafizadeh29 sie 2015, 13:33
Czy jest możliwe, aby umieścić warunek do tegowhile() ? ponieważ chcę tylko 10 pierwszych rzędów(załóżmy, że wynik wynosi 11 wierszy)

yourAnswerToTheQuestion