当按desc或limit 30排序时,使用额外参数进行搜索失败


Searching with extra params failing when ordering by desc or by limit 30

我终于决定在我的一个mysql请求中包含一个搜索参数。当"order by desc"或"limit 30"在末尾不存在时,它会工作,如下所示:

$sql = 'SELECT blahblah, bla FROM databasename WHERE lat >= ? AND lat <= ? AND lon >= ? AND lon <= ?';
$params = array( $minlat, $maxlat, $minlon, $maxlon );
if ( isset( $_GET['sear'] ) ) {
    $sql .= "AND (searcher LIKE ?)";
    $params[] = '%'.$_GET['sear'].'%';  
}

但是,当包含"order by desc"或"limit 30"时,它不起作用,如下所示:

$sql = 'SELECT blahblah, bla FROM databasename WHERE lat >= ? AND lat <= ? AND lon >= ? AND lon <= ? ORDER BY autoinc DESC LIMIT 30';
$params = array( $minlat, $maxlat, $minlon, $maxlon );
if ( isset( $_GET['sear'] ) ) {
    $sql .= "AND searcher LIKE ? ";
    $params[] = '%'.$_GET['sear'].'%';  

}

我怎么能让它工作与"限制30"或"订单按desc"?

您的ORDER BY和LIMIT子句必须所有WHERE条件

$sql = 'SELECT blahblah, bla FROM databasename WHERE lat >= ? AND lat <= ? AND lon >= ? AND lon <= ? ';
$params = array( $minlat, $maxlat, $minlon, $maxlon );
if ( isset( $_GET['sear'] ) ) {
    $sql .= "AND searcher LIKE ? ";
    $params[] = '%'.$_GET['sear'].'%';  
}
$sql .= ' ORDER BY autoinc DESC LIMIT 30';