Mysqli Получить данные и отобразить их — лучший способ

Какой из вариантов ниже лучше

Опция 1:

//control file:
$smpt = $con->query("SELECT id,name FROM customers");
//fetch all resuts
$results = array();
while ($row = $result->fetch_assoc()) {
$results[] = $row;
}
$smpt->close();
//Note: PHP version < 5.3.0 so I can't use just $results->fetch_all('MYSQLI_ASSOC');

//view file:
foreach($results as $key=>$value) {
//display results
}
unset($results);

Вариант 2:

//control file:
$smpt = $con->query("SELECT id,name FROM customers");
//fetch all resluts

//view file:
while($row = $result->fetch_assoc()) {
//display results
}
$smpt->close();

Я пытаюсь полностью отделить логику от представления … В настоящее время я использую вариант 2, потому что с вариантом 1 сценарий проходит 2 цикла. один для получения данных, а другой для их отображения. Но какой из них лучше использовать?

Спасибо

0

Решение

Опция 1 позволяет повторно использовать $data переменной, так что вы можете отобразить результаты дважды, но цена этого заключается в том, что у вас может быть большой объем данных, хранящихся в переменной. Вы можете очистить это с помощью unset($data) как только вы на 100% уверены, что закончили с этим.

Вариант 2 требует меньше циклов (только один вместо двух) и не нуждается в дополнительной переменной для хранения данных. Стоимость этого в том, что while цикл может быть использован только один раз.

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

Я бы посоветовал Вариант 2 при условии, что вам нужно только использовать while цикл один раз. Кроме того, вы могли бы сравните ваши сценарии чтобы увидеть, как они выступают друг против друга.

0

Другие решения

Всегда лучше, чтобы взгляды имели дело только с проблемами представления.

Таким образом, из двух упомянутых вами вариантов я бы выбрал вариант 1, чтобы вам не приходилось закрывать $ smpt внутри представления ($ smpt не имеет ничего общего с уровнем представления).

0

По вопросам рекламы [email protected]