1

testQuery()は、テーブルCATEGORIESからすべての行を取得するために使用するメソッドです。

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");
        }
     }

私は通常fetchAll()を使用しますが、メモリをあまり消費しないため、fetchを使用するように言われました。しかし、fetch()と以下のコードを使用して複数の行を取得するのに問題があります。

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


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

1行のみをフェッチします。では、複数の行を取得して印刷するにはどうすればよいですか?イテレーションの使用については前に説明しましたが、実装するかどうかはわかりません。どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

2

Fetch は確かにデータベースから一度に 1 つずつデータをプルしますが、すべてのデータを取得するまで行を反復処理する必要があります。

これをループにポップして、すべてのデータを取得することができます。

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

このような何かがうまくいくはずです:

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

変数を設定しているか、オブジェクト内にコードを持っているかによって異なります。

于 2012-08-24T08:51:57.463 に答える
1

単純にステートメント オブジェクトを返すことができます。
または、カプセル化する場合 (データのフェッチにのみ使用できるようにするため) 、SPL の IteratorIteratorを使用します。

return new IteratorIterator($stmtAA);

その後、使用できます

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

あなたのスクリプトで。

于 2012-08-24T08:56:42.643 に答える