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

266
16 августа 2017, 16:23

Люди добрые, завис на простейшей задаче.

Делаю select запрос к БД с параметрами. Далее вывожу полученный результат в виде выпадающего списка. Но с некоторой долей вероятности - результат может быть пустым. В этом случае mysqli_fetch_assoc соответственно - ругается. Туплю - не знаю куда поставить проверку на то, что из БД что-то было получено.

Немного рабочего кода(спасибо Алексей Шиманский за напоминание):

<?
$sql = $db->query('SELECT * FROM guests2order WHERE oid="'.$_SESSION['oid'].'"');
$row_num = mysqli_num_rows($sql);
if($row_num != '0'){
echo '<select>';
while($guests = mysqli_fetch_assoc($sql)) {
echo '<option value="'.$guests['id'].'">'.$guests['name'].'</option>';
}
}
echo '</select>';
?>

Соответственно хочется, что бы если из БД ничего не получено - <select>...</select> - вообще не выводился.

(Если проверять на пустоту $sql - то оно равно TRUE, если был вообще получен ответ от БД - даже пустой.)

Answer 1
<?php
$sql = $db->query('SELECT * FROM guests2order WHERE oid="'.$_SESSION['oid'].'"');
$hasValues = false;
if($guests = mysqli_fetch_assoc($sql)){
    echo '<select>';
    echo '<option value="'.$guests['id'].'">'.$guests['name'].'</option>';
    $hasValues = true;
}
while($guests = mysqli_fetch_assoc($sql)) {
    echo '<option value="'.$guests['id'].'">'.$guests['name'].'</option>';
}
if($hasValues) echo '</select>';

1) Проверка if(!empty($guests)) не нужна, поскольку mysqli_fetch_assoc возвращает либо массив с данными, либо false, при котором цикл дальше не пойдет

2) Старайтесь никогда не использовать подобный способ создания SQL-запроса. Используйте подготовленные выражения

READ ALSO
Программа не выходит в главное окно

Программа не выходит в главное окно

Visual Studio 12, C#Вот команда меню дочерней формы:

317
Дебаг SQL CLR функций в консольном приложении

Дебаг SQL CLR функций в консольном приложении

Можно ли SQL CLR проект подключить, как библиотеку к консольному приложению и дебажить ее там без деплоя на SQL-сервере?

172
Таймер в XNA/MonoGame

Таймер в XNA/MonoGame

Здравствуйте, как сделать исчезновение спрайта по истечению например 3-ех секунд на MonoGame/XNA?

266
Скриншот страницы браузера C#

Скриншот страницы браузера C#

Помогите сделать скриншот бразуера, только без видимости вкладок и закладокДелаю вот так, а оно делает скриншот не всего окна

472