3

私の機能はそのように見えます。

 private function generateTree($courseID) {
        $q = "SELECT l.id, l.name AS lesson_name, c.name AS course_name FROM lessons AS l, courses AS c WHERE l.course_id=c.id AND c.id=?";
        $stmt = $this->db->prepare($q);
        $stmt->bind_param("i", $courseID);
        $stmt->execute();
        $stmt->store_result();
        if ($stmt->num_rows > 0) {
            $stmt->bind_result($id, $lName, $cName);
            echo "<li> <a href='#'>$cName</a> <ul>";
            while ($stmt->fetch()) <====HERE!!!
                echo "<li> <a href='?course=$courseID&lesson=$id'> $lName </a></li>";
            echo "</ul> </li>";
        }
    }

問題は、while 条件内でデータをフェッチし始めていることですが、while の前にもデータが必要です。データを 2 回取得できますか? 他の提案はありますか?

4

3 に答える 3

6

4年が経ちましたが、私のように誰かがこの質問に出くわした場合:

while ($stmt->fetch()) {
  // do your thing
}

$stmt->data_seek(0);

while ($stmt->fetch()) {
  // do something other
}

ここでドキュメントを読むことができます

于 2016-11-26T23:38:07.367 に答える
4

fetchAll()を使用してすべてのデータを取得し、必要な回数だけ繰り返すことができます。

$result = $stmt->fetchAll(); // PDO
$result = $stmt->fetch_all(); // MySQLi

foreach($result as $row) { print $row['lesson_name']; }
foreach($result as $row) { print $row['lesson_name']; }
foreach($result as $row) { print $row['lesson_name']; }
etc...

更新: コードにいくつかのアイデアが混在しているように見えるため、何をしているのか完全にはわかりません。おそらく、あなたはこのようなものが欲しいですか?

$q = "SELECT l.id, l.name AS lesson_name, c.name AS course_name FROM lessons AS l, courses AS c WHERE l.course_id=c.id AND c.id=?";
$stmt = $this->db->prepare($q);
$stmt->bind_param("i", $courseID);
$stmt->execute();

if ($stmt->num_rows > 0)
{
    $results = $stmt->fetch_all();

    foreach($results as $row)
    {
        print_r($row);
    }
}
于 2012-07-17T16:31:40.460 に答える
2

データベース結果の配列を返すようにデータベースクエリクラスを作成できると思います。データは何度でもご利用いただけます。

次のように、データベース結果セットの配列を作成できます。

while($row = mysql_fetch_assoc($result))
{
   $results[] = $row;
}
于 2012-07-17T16:33:02.897 に答える