From 5f5023305f15028644da5751f045f4ac3e1237e0 Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Wed, 31 Dec 2025 02:33:54 +0100 Subject: [PATCH] ggg --- src/App/Search.php | 49 ++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/App/Search.php b/src/App/Search.php index 12bd475..6f77e1f 100644 --- a/src/App/Search.php +++ b/src/App/Search.php @@ -26,18 +26,13 @@ final class Search foreach ($tokens as $tok) { $tok = trim($tok); if ($tok === '') continue; - $ph = [ - ':t' . $i . 'a', - ':t' . $i . 'b', - ':t' . $i . 'c', - ':t' . $i . 'd', - ':t' . $i . 'e', - ':t' . $i . 'f', - ]; - $conditions[] = "(title LIKE {$ph[0]} OR teaser_public LIKE {$ph[1]} OR description LIKE {$ph[2]} OR city LIKE {$ph[3]} OR region LIKE {$ph[4]} OR zip LIKE {$ph[5]})"; - foreach ($ph as $p) { - $params[$p] = '%' . $tok . '%'; - } + $conditions[] = "(title LIKE :t{$i}a OR teaser_public LIKE :t{$i}b OR description LIKE :t{$i}c OR city LIKE :t{$i}d OR region LIKE :t{$i}e OR zip LIKE :t{$i}f)"; + $params["t{$i}a"] = '%' . $tok . '%'; + $params["t{$i}b"] = '%' . $tok . '%'; + $params["t{$i}c"] = '%' . $tok . '%'; + $params["t{$i}d"] = '%' . $tok . '%'; + $params["t{$i}e"] = '%' . $tok . '%'; + $params["t{$i}f"] = '%' . $tok . '%'; $i++; } @@ -68,13 +63,13 @@ final class Search $whereParts[] = "(lat IS NOT NULL AND lng IS NOT NULL)"; $whereParts[] = "(lat BETWEEN :latMin AND :latMax)"; $whereParts[] = "(lng BETWEEN :lngMin AND :lngMax)"; - $params[':glat'] = $lat; - $params[':glng'] = $lng; - $params[':latMin'] = $lat - $latRange; - $params[':latMax'] = $lat + $latRange; - $params[':lngMin'] = $lng - $lngRange; - $params[':lngMax'] = $lng + $lngRange; - $params[':radius'] = $radius; + $params['glat'] = $lat; + $params['glng'] = $lng; + $params['latMin'] = $lat - $latRange; + $params['latMax'] = $lat + $latRange; + $params['lngMin'] = $lng - $lngRange; + $params['lngMax'] = $lng + $lngRange; + $params['radius'] = $radius; } $where = $whereParts ? ('WHERE ' . implode(' AND ', $whereParts)) : ''; @@ -88,8 +83,20 @@ final class Search $sql .= " LIMIT :lim"; $stmt = $this->pdo->prepare($sql); - $params[':lim'] = $limit; - $stmt->execute($params); + foreach ($params as $k => $v) { + $stmt->bindValue(':' . $k, $v, \PDO::PARAM_STR); + } + $stmt->bindValue(':lim', (int)$limit, \PDO::PARAM_INT); + if ($distanceFiltering) { + $stmt->bindValue(':radius', $params['radius'], \PDO::PARAM_STR); + $stmt->bindValue(':glat', $params['glat'], \PDO::PARAM_STR); + $stmt->bindValue(':glng', $params['glng'], \PDO::PARAM_STR); + $stmt->bindValue(':latMin', $params['latMin'], \PDO::PARAM_STR); + $stmt->bindValue(':latMax', $params['latMax'], \PDO::PARAM_STR); + $stmt->bindValue(':lngMin', $params['lngMin'], \PDO::PARAM_STR); + $stmt->bindValue(':lngMax', $params['lngMax'], \PDO::PARAM_STR); + } + $stmt->execute(); return $stmt->fetchAll(\PDO::FETCH_ASSOC) ?: []; } }