Задать вопрос
mikiveyn
@mikiveyn

Как сделать так, что бы при пустом запросе в базу выводились ВСЕ значения?

Добрый день уважаемые участники форма. Пожалуйста подскажите как сделать так, что бы при пустом запросе в базу выводились ВСЕ значения.
У меня есть PHP скрипт, который если указан вариант выводит значение из таблицы. Но если параметр не указан , то не выводит :
WHERE account_id=? AND priority=?
А мне хочется , что бы если в SQL запрос для priority приходило пустое значение, то скрипт выдавал ВСЕ доступные вариант .
  • Вопрос задан
  • 170 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
есть немного замороченный способ, но в целом он требует куда меньше кода
WHERE (account_id=? OR ? is null)  AND (priority=? OR  ? is null)

Чтобы его использовать, надо всего лишь передавать каждую переменную в запрос по два раза (и следить, чтобы пустые переменные содержали null).

Другим вариантом является условная сборка запроса.
Для этого мы собираем условия и переменные для них в массивы

$conditions = [];
$parameters = [];
if ($account_id)
{
    $conditions[] = 'account_id=?';
    $parameters[] = $account_id;
}
if ($priority )
{
    $conditions[] = 'priority =?';
    $parameters[] = $priority;
}

собираем из условий запрос и выполняем его, привязывая все переменные разом
тут из сложного будет привязка переменных из массива, но благодаря оператору распаковки аргументов это не так уж и сложно.
if ($parameters)
{
    $sql .= " WHERE ".implode(" AND ", $conditions);    
    $stmt = $db->prepare($sql);
    $stmt->bind_param(str_repeat("s", count($parameters)), ...$parameters);
    $stmt->execute();
    $result = $stmt->get_result();
} else {
    $restult = $db->query($sql);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы