如何仅用SQL检测用户输入文本是否包含禁用关键词?
可以仅通过SQL实现禁用关键词检测
你提供的示例语句逻辑是反向的,正确的做法是检查用户提交的文本是否包含表中的任意禁用关键词,而非让关键词去匹配用户文本。
核心实现语句
仅判断是否存在禁用词(高效)
如果只需要知道用户文本是否包含禁用词,用EXISTS子查询效率最高,找到匹配项后会立即终止查询:
SELECT EXISTS( SELECT 1 FROM deny_keywords WHERE $user_text LIKE CONCAT('%', word, '%') ) AS has_deny_keyword;
返回结果中has_deny_keyword为1表示存在禁用词,0表示不存在。
获取具体匹配的禁用词
如果需要知道具体是哪些关键词被匹配到,可以直接查询:
SELECT word FROM deny_keywords WHERE $user_text LIKE CONCAT('%', word, '%');
该语句会返回所有在用户文本中出现的禁用关键词。
重要注意事项
实际使用时必须用参数化查询传递$user_text变量,绝对不能直接将变量拼接进SQL语句,否则会引发严重的SQL注入安全问题。
内容的提问来源于stack exchange,提问作者omid hv
相关产品推荐
相关产品推荐

