PHP Получает данные дважды

90
12

Моя функция выглядит так.


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

Проблема в том, что я начинаю извлекать данные в какое-то время, но мне это нужно и до этого. Могу ли я получать данные дважды? Любые другие предложения?

спросил(а) 2021-01-25T20:34:57+03:00 5 месяцев назад
1
Решение
89

Вы можете использовать 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);
}
}

ответил(а) 2021-01-25T20:34:57+03:00 5 месяцев назад
88

Прошло четыре года, но если кто-то наткнется на этот вопрос, как я:


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

$stmt->data_seek(0);

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

Вы можете прочитать здесь документацию

ответил(а) 2021-01-25T20:34:57+03:00 5 месяцев назад
77

Я думаю, вы можете сделать свой класс запросов к базе данных таким образом, чтобы он возвращал массив результата базы данных. Вы можете использовать данные столько раз, сколько хотите.


Вы можете сделать массив набора данных базы данных следующим образом:


while($row = mysql_fetch_assoc($result))
{
$results[] = $row;
}

ответил(а) 2021-01-25T20:34:57+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема