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

问题是我开始在一段时间内获取数据,但在一段时间之前我也需要它。我可以获取两次数据吗?还有其他建议吗?

4

3 回答 3

6

已经四年了,但如果有人像我一样偶然发现这个问题:

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 回答