Запуск поискового скрипта PHP с пустыми параметрами возвращает всю таблицу MySQL - PullRequest
0 голосов
/ 18 октября 2011

Когда я выполняю следующий запрос MySQL через PHP и все элементы $_GET() являются пустыми строками, возвращаются все записи в таблице volunteers (по понятным причинам).

$first = $_GET['FirstName'];
$last = $_GET['LastName'];
$middle = $_GET['MI'];

$query = "SELECT * FROM volunteers WHERE 0=0";

if ($first){
    $query .= " AND first like '$first%'";
}

if ($middle){
    $query .= " AND mi like '$middle%'";
}

if ($last){
    $query .= " AND last like '$last%'";
}

$result = mysql_query($query);

Каков самый элегантный способ разрешить отправку пустых параметров в этот скрипт, в результате чего возвращается пустое $result?

Ответы [ 3 ]

2 голосов
/ 18 октября 2011

мое решение:

$input = Array(
    'FirstName' => 'first',
    'LastName'  => 'last',
    'MI'        => 'mi'
);

$where = Array();
foreach($input as $key => $column) {
    $value = trim(mysql_escape_string($_GET[$key]));
    if($value) $where[] = "`$column` like '$value%'";
}
if(count($where)) {
    $query = "SELECT * FROM volunteers WHERE ".join(" AND ", $where);
    $result = mysql_query($query);
}
1 голос
/ 18 октября 2011

Нет смысла запускать (потенциально) дорогой запрос, если для этого запроса ничего нет.Поэтому вместо того, чтобы пытаться придумать альтернативный запрос для предотвращения поиска без терминов, просто не запускайте поиск вообще, если нет терминов:

$where = '';
... add clauses ...
if ($where !== '') {
   $sql = "SELECT ... WHERE $where";
   ... do query ...
} else {
   die("You didn't enter any search terms");
}
0 голосов
/ 18 октября 2011

С вашим текущим кодом, если все пусто, вы получите WHERE 0 = 0 SQL, который TRUE для всех строк в таблице.

Все, что вам нужно сделать, это удалить операторы if ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...