есть немного замороченный способ, но в целом он требует куда меньше кода
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);
}