如何检查MySQL数据库中违禁字的输入?

时间:2010-12-17 19:36:03

标签: php mysql

假设,如果我不想在用户名中的任何地方允许“douche”这个词,我的数据库中有一张表,其中包含所有禁止的词......

$q = "SELECT * FROM restrictions WHERE prohibited LIKE '%username%'";
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));

if (mysqli_num_rows($r) !== 0)
{
//username is prohibited
echo "invalid";
}
else
{
...etc

问题是我不知道如何执行一个可以获取部分匹配的查询(即Jdoucher或douchebag4)。我知道,%username%部分显然是错误的。有谁知道如何做到这一点?它甚至可能吗?感谢。

4 个答案:

答案 0 :(得分:3)

select *
    from restrictions 
    where locate(prohibited, @username) <> 0

答案 1 :(得分:1)

你做的是你给出的例子的反面。首先获取所有被禁止的关键字,然后在用户名中查找每个单词:

if (stripos($username, $word) !== FALSE) {
   // uhoh
}

答案 2 :(得分:0)

使用基于simshaun答案的正则表达式匹配可能是更快的答案。

当然,如果你的单词数据库太长,你就会看到处理时间和大量内存需求。

答案 3 :(得分:0)

您可以使用regex完成此操作。