Как точнее искать пользователей с помощью sql? - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть оператор SQL, который ищет пользователей и их имена.Вот код:

SELECT * FROM user_info WHERE username,name LIKE '$search%' and id!='$myId' OR MATCH (name,username) AGAINST ('$search' IN NATURAL LANGUAGE MODE) AND id!='$myId' LIMIT 10

Что здесь не так?Кто-нибудь может предложить мне лучший и более быстрый алгоритм поиска людей?И заранее спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

У меня нет MySQL здесь для тестирования, но синтаксис foo,bar like '...' выглядит неправильно.Это, вероятно, должно быть разбито и превращено в ИЛИ.

После этого в SQL OR имеет более низкий приоритет, чем AND.Таким образом, A OR B AND C на самом деле означает A OR (B AND C).Поэтому ваше условие не делает то, что вы, вероятно, хотите.Добавьте скобки.

Следующее, что вызывает сомнения, это то, как вы вставляете свой поиск и идентификатор в SQL.Просто вставьте что-то в строку, и вы столкнетесь с атаками SQL-инъекций, что является распространенной проблемой безопасности.См. https://xkcd.com/327/ для примера того, как инъекционная атака выглядит на практике.Найдите «заполнители», чтобы узнать, как это сделать лучше.

Что касается более быстрых алгоритмов, вам, вероятно, просто нужны индексы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...