PHP mysql - пустая переменная php, используемая в mysql, выбирает все строки

У меня есть переменная $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. Есть ли другой способ?

Я не понимаю, почему нельзя использовать if (!empty($search))

Shobi 25.09.2018 10:50

Вы широко открыты для внедрения sql. И если вы получаете пустые значения в $search, то почему вы запрашиваете?

Saad Suri 25.09.2018 10:52
This may have no sense at all but, I can't use a method like this не могли бы вы объяснить это требование? Вы не сможете выполнить этот запрос, не получив всего, так как вы будете использовать LIKE %% в качестве предложения WHERE.
Peter Mellett 25.09.2018 11:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
101
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Отправьте пустой массив, если переменная поиска пуста.

if (!empty($search)){
       $result=$conn->query("SELECT * FROM users WHERE name LIKE '%".$search."%'");
}
else {
      $result = [];
}

Этот ответ предполагает, что результатом $conn->query() также будет массив. Наиболее вероятный виновник, PDO::query, возвращает PDOStatement, что заставляет код вести себя по-разному в зависимости от содержимого $search.

Simon Brahan 25.09.2018 11:06
Ответ принят как подходящий

Если вы измените свой запрос, он вернет 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."%')");   

если строка поиска пуста, будут возвращены только пустые имена из таблицы; предполагая, что в таблице нет пустых имен, это вернет нулевые результаты.

Другие вопросы по теме