У меня есть переменная $search='';, в которой хранятся слова, набранные в строке поиска, и пустое значение по умолчанию. Затем я выполняю такой запрос:
$result=$conn->query("SELECT * FROM users WHERE name LIKE '%".$search."%'");
Но этот запрос возвращает все строки, когда переменная $ search пуста. И я хочу, чтобы он показывал результаты строки «0», когда она пуста.
Это может не иметь никакого смысла, но я не могу использовать такой метод:
if (!empty($search)){
$result=$conn->query("SELECT * FROM users WHERE name LIKE '%".$search."%'");
}
Мне нужен метод, который выполняет тот же запрос, независимо от значения $search. Есть ли другой способ?
Вы широко открыты для внедрения sql. И если вы получаете пустые значения в $search, то почему вы запрашиваете?
This may have no sense at all but, I can't use a method like this не могли бы вы объяснить это требование? Вы не сможете выполнить этот запрос, не получив всего, так как вы будете использовать LIKE %% в качестве предложения WHERE.






Отправьте пустой массив, если переменная поиска пуста.
if (!empty($search)){
$result=$conn->query("SELECT * FROM users WHERE name LIKE '%".$search."%'");
}
else {
$result = [];
}
Этот ответ предполагает, что результатом $conn->query() также будет массив. Наиболее вероятный виновник, PDO::query, возвращает PDOStatement, что заставляет код вести себя по-разному в зависимости от содержимого $search.
Если вы измените свой запрос, он вернет 0 строк, если $search пуст.
$result=$conn->query("SELECT * FROM users WHERE name LIKE '%".$search."%' AND '".$search."' != ''");
Возможно, использование IF в запросе WHERE поможет вам:
$result=$conn->query("SELECT * FROM users WHERE name LIKE IF ( '%".$search."%' = '%%', '', '%".$search."%')");
если строка поиска пуста, будут возвращены только пустые имена из таблицы; предполагая, что в таблице нет пустых имен, это вернет нулевые результаты.
Я не понимаю, почему нельзя использовать
if (!empty($search))