簡體   English   中英

使用空參數運行PHP搜索腳本將返回整個MySQL表

[英]Running PHP search script with empty parameters returns entire MySQL table

當我通過PHP運行以下MySQL查詢並且$_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返回空$result的最優雅方法是什么?

我的解決方案:

$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);
}

如果沒有任何事情可以執行,那么運行(可能)昂貴的查詢毫無意義。 因此,與其嘗試提​​出一個替代查詢以防止搜索無條件詞,不如根本沒有條件,根本不要運行搜索:

$where = '';
... add clauses ...
if ($where !== '') {
   $sql = "SELECT ... WHERE $where";
   ... do query ...
} else {
   die("You didn't enter any search terms");
}

使用當前代碼,如果所有內容均為空,則將獲得WHERE 0 = 0 SQL,對於表中的所有行均為TRUE。

您所要做的就是刪除if語句...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM