我有一条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
这是怎么了? 谁能建议我一个更好,更快的搜索人的算法? 并预先感谢!
答案 0 :(得分:1)
我没有要测试的MySQL,但是语法foo,bar like '...'
看起来不正确。可能需要将其分解为OR。
此后,在SQL中,OR
的优先级比AND
低。因此A OR B AND C
实际上是A OR (B AND C)
的意思。因此,您的id条件不会执行您可能想要的操作。添加括号。
接下来值得怀疑的是您如何将搜索和ID坚持到SQL中。只需将内容粘贴到字符串中即可使您容易遭受SQL注入攻击,这是一个常见的安全问题。有关实际情况下注入攻击的示例,请参见https://xkcd.com/327/。查找“占位符”以了解如何做得更好。
对于更快的算法,您可能只需要索引即可。