假设,如果我不想在用户名中的任何地方允许“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%部分显然是错误的。有谁知道如何做到这一点?它甚至可能吗?感谢。
答案 0 :(得分:3)
select *
from restrictions
where locate(prohibited, @username) <> 0
答案 1 :(得分:1)
你做的是你给出的例子的反面。首先获取所有被禁止的关键字,然后在用户名中查找每个单词:
if (stripos($username, $word) !== FALSE) {
// uhoh
}
答案 2 :(得分:0)
使用基于simshaun答案的正则表达式匹配可能是更快的答案。
当然,如果你的单词数据库太长,你就会看到处理时间和大量内存需求。
答案 3 :(得分:0)
您可以使用regex完成此操作。