Я получаю сообщение об ошибке, но я не могу найти ее сам.
Может быть, кто-то из вас, ребята, знает решение.
Мой запрос:
return $db->fetchAll("SELECT DISTINCT *,
MATCH(k.naam, k.plaats)
AGAINST('{$newQ}'
IN BOOLEAN MODE)
as score
FROM klant k
WHERE MATCH(k.naam, k.plaats)
AGAINST('{$newQ}' IN BOOLEAN MODE)
OR code = '{$q}'
AND bedrijf_id = '{$bedrijf}'
ORDER BY score DESC LIMIT " . intval($limit));
И моя ошибка:
Message: SQLSTATE[42000]:
Syntax error or access violation: 1064 syntax error,
unexpected $end, expecting FTS_TERM or FTS_NUMB or '*',
query was: SELECT DISTINCT *, MATCH(k.naam, k.plaats) AGAINST('*' IN BOOLEAN MODE) as score FROM klant k WHERE MATCH(k.naam, k.plaats) AGAINST('*' IN BOOLEAN MODE) OR code = '' AND bedrijf_id = '1' ORDER BY score DESC LIMIT 3
Запрос выглядит для меня абсолютно нормально, может кто-нибудь указать мне, куда я должен смотреть?
match
возвращает двойное значение, а не логическое значение — в вашем where
пункт:
return $db->fetchAll("SELECT DISTINCT *,
MATCH(k.naam, k.plaats)
AGAINST('{$newQ}'
IN BOOLEAN MODE)
as score
FROM klant k
WHERE MATCH(k.naam, k.plaats)
AGAINST('{$newQ}' IN BOOLEAN MODE)
HAVING relevance > 0 -- Missing from the OP
OR code = '{$q}'
AND bedrijf_id = '{$bedrijf}'
ORDER BY score DESC LIMIT " . intval($limit));
Я столкнулся с той же проблемой сегодня. Я обнаружил, что причиной является формат параметров MATCH (). Следовательно, в вашем случае причиной ошибки является значение, которое вы передаете {$ NewQ}.
Чтобы узнать синтаксис для MATCH (), проверьте:
http://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html