如何在同一个查询中两次列出数据库行?

You basically have two options to echo the rows in the HTML page using PHP:

Using PDO:

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute(array(':name' => $name));

foreach ($stmt as $row) {
    // do something with $row
}

Using mysqli:

$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name);

$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // do something with $row
}

So when you give $row the data of the first row, the pointer moves to the next row of the query. If you are going to need that same list of data in other part of the page, what is the proper thing to do?

  1. Return the pointer to the first row (how to do it?);
  2. Recall the query (and spend more time and resources);
  3. Create a array with the data (how to do it?);

I always use an array for this.. If nothing else, you will keep high readability of your code at least.