2013-09-05 6 views
1

Я пытался обновить функцию поиска mysql с помощью полнотекстового поиска.Ошибка SQL при попытке реализовать полнотекстовый поиск

Это мой стол:

CREATE TABLE `locations` (
`loc` text NOT NULL, 
    PRIMARY KEY (`l_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=22222223 DEFAULT CHARSET=latin1; 

И запрос:

$sql = 
<<<SQL 
SELECT *, 
FROM locations 
WHERE MATCH(loc) AGAINST($location) 
SQL; 

Но я получаю эту ошибку:

Фатальная ошибка: Uncaught исключение 'mysqli_sql_exception' с сообщением «У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'FROM location WHERE MATCH (loc) AGAINST (x)' в строке 2 '

Что может быть неправильным с моим кодом?

UPDATE: Удаленная запятая, как вы предлагали, но прямо сейчас firebug показывает только 500 Internal Server Error. Попробовал сменить запрос на старый:

$sql = <<<SQL 
SELECT * 
FROM `locations` 
WHERE `loc` LIKE '$location%' 
LIMIT 30; 
SQL; 

Сценарий работает с этим.

+0

Внутренняя ошибка сервера 500 (или пустая страница) означает, что ваш скрипт выдает ошибку, но вы не настроили PHP для отображения сообщений об ошибках. Это то, что вам нужно исправить, прежде чем идти дальше; невозможно кодировать без помощи сообщений об ошибках. Вот краткое объяснение (http://stackoverflow.com/a/5680885/13508). Вы не можете публиковать сообщения на форуме каждый раз, когда вы получаете синтаксическую ошибку. –

+0

@ ÁlvaroG.Vicario странно, но ему удалось увидеть ошибку из дополнительной запятой. –

ответ

1

Удалить запятую после select *.

SELECT * 
FROM locations 
WHERE MATCH(loc) AGAINST('$location') 

И как упоминалось в @eggyal, вы должны указать местоположение в запросе.

+1

Также потребуется (по крайней мере) цитата '$ location'. – eggyal

1

Удалите запятую после SELECT.

0

Еще одна опечатки на основе вопроса ...

При поиске ошибки, все дни выглядит запрос перед цитируется часть в сообщении об ошибке. Значит ошибка здесь

SELECT *, 
+0

Хорошо, спасибо за совет. Я только начал изучать php/mysql. К сожалению, удаление запятой не помогает. – user2699508

+0

. но если у вас есть ** другая ** ошибка, удаление этой запятой не будет исправлять все ошибки в вашем коде сразу. –

0
$sql = 
<<<SQL 
SELECT *, 
FROM locations 
WHERE MATCH(loc) AGAINST($location) 
SQL; 

должен быть

$sql = 
<<<SQL 
SELECT * 
FROM locations 
WHERE MATCH(loc) AGAINST($location) 
SQL; 

Comma является излишним.