2016-09-02 2 views
-1

У меня есть запрос sql, который ищет базу данных, чтобы найти магазины в радиусе 20 миль от почтового индекса, однако я не могу заставить поиск по ключевому слову работать.Сложный поиск базы данных

$search = mysqli_real_escape_string(trim($_POST['keywords'])); 

$sql = "SELECT *, (3959 * acos(cos(radians($userLat)) * cos(radians(lat)) 
* cos(radians(lng) - radians($userLng)) + sin(radians($userLat)) 
* sin(radians(lat)))) AS distance 
FROM firms 
HAVING distance < 20 
ORDER BY distance LIMIT 0 , 20 
AND WHERE keywords 
LIKE %$search%"; 

$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
// output data of each row 
while($row = $result->fetch_assoc()) { ?> 
+1

Что происходит с t его код? 'mysqli_real_escape_string (' требует строки подключения.Из использования параметризованных запросов – chris85

+0

@ chris85 Спасибо, я удалил mysqli_real_escape_string ('и it wokrds –

+0

Это не то, что я имел в виду. будут использовать тот подход, который вам нужен, чтобы использовать его правильно. – chris85

ответ

0
SELECT columns 
    , I 
    , actually 
    , want 
    , ... as distance 
    FROM firms 
WHERE keywords LIKE :search 
HAVING distance < 20 -- or AND ... < 20 
ORDER 
    BY distance 
LIMIT 0 , 20 

и использовать параметризованные запросы

+0

Вам нужно избегать '' 'или использовать одинарные кавычки, так как он находится внутри строки с двумя кавычками. – Barmar

+0

Вы не можете иметь' ИЛИ WHERE', это должно просто будь 'OR'. – Barmar

0

RTM: mysqli_real_escape_string() Вы не называть его правильно.

И даже если вы, ваш запрос имеет синтаксические ошибки:

LIKE %$search%"; 
    ^--------^---missing quotes 

Таким образом, вы порождающие буквального SQL

SELECT ... LIKE %foo% 

вместо того

SELECT ... LIKE '%foo%' 

вы должны be

+0

Но почему кто-нибудь будет использовать _real_escape_string в любом случае?!? – Strawberry

Смежные вопросы