Loop MySQLi Подготовленное выражение с PHP OOP

107
15

Здравствуйте, я пытаюсь пропустить все строки в моей таблице базы данных, используя подготовленный оператор, написанный на PHP, каждый раз, когда я использую while loop в функции fetch(), он получает меня в бесконечном цикле, вот мой код, пожалуйста, помогите

public function loadIndex() {
$conn = new Database();
$db = $conn->Connect();
$query = "
SELECT Title,Description,uploadeddate
FROM article
ORDER BY article.uploadeddate DESC LIMIT 10";
$stmt = $db->prepare($query);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($title, $desc, $date);
$num_rows = $stmt->num_rows();
$fetch = $stmt->fetch();
$data = array(
'title' => $title,
'desc' => $desc,
'date' => $date,
'num_rows' => $num_rows,
'fetch' => $fetch
);
return $data;
}

И вот использование

<?php
art = new Articles();
$index = $art->loadIndex();
$num = $index['num_rows'];
if($num != 0) {
while() {$index['fetch']} {
echo $index['title']."<br />";
echo $index['desc']."<br />";
echo $index['date']."<br />";
}
}?>

благодаря

спросил(а) 2021-01-19T22:33:37+03:00 2 месяца, 3 недели назад
1
Решение
61

Полный беспорядок!

Забыть о своем здравом смысле очень актуально.

Не тестировалось, но попробуйте это для стартера на 10.

Класс статьи

public function loadIndex() {
$conn = new Database();
$db = $conn->Connect();

$title = '';
$desc = '';
$date = '';
$data = array();

$query = "SELECT Title,Description,uploadeddate
FROM article
ORDER BY article.uploadeddate DESC LIMIT 10";

$stmt = $db->prepare($query);
$stmt->execute();

$stmt->bind_result($title, $desc, $date);

while ( $stmt->fetch() ) {

$data[] = array(
'title' => $title,
'desc' => $desc,
'date' => $date
);
}

return $data;
}

Основной код, вызывающий Article-> loadIndex()

<?php
art = new Articles();
$index = $art->loadIndex();

// you dont need to know how big the $index array is here
// if its empty then the foreach will just not run.

foreach ($index as $row) {
echo $row['title'] . '<br />';
echo $row['desc'] . '<br />';
echo $row['date'] . '<br />';
}
?>

ответил(а) 2021-01-19T22:33:37+03:00 2 месяца, 3 недели назад
-4

Прежде всего, вы должны подключиться к базе данных только один раз, а не в каждом вызове функции. После подключения вы можете просто выполнить запросы внутри функции и, следовательно, не нужно подключаться каждый раз.

Во-вторых, бесконечный цикл вызван тем, что внутри цикла нет никакого условия.

Поэтому измените это:

while() {$index['fetch']}

в

while($index['fetch'])

Спасибо Ахмару

ответил(а) 2021-01-19T22:33:37+03:00 2 месяца, 3 недели назад
-4

В вашем индексе:

While($stmt->fetch())
{
$index =count($data);
$data['title'][$index] = $title;
...
}

ответил(а) 2021-01-19T22:33:37+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

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