1

我有一个 MySQL 数据库设置,如下所示:

id | username
-------------
1  | name1
2  | name2
3  | name3

但是当我在 PHP 中使用这段代码时,它只读取名字。注意:我需要它来读取名称。id 用于其他用途。

$sql = mysql_query("SELECT `username` FROM `black_list`");      
$blacklist = array();         
while($row = mysql_fetch_array($sql))
{
    $blacklist[] = $row;
    if(!in_array($name,$blacklist))
    {
          //User not protected
    } else {
          echo "User Protected";
    }
 }

如果有人可以帮助我,那就太好了。谢谢 :)

4

3 回答 3

1

用这个

while($row = mysql_fetch_array($sql))
{
    $blacklist[] = $row['username'];
}

if(!in_array($name,$blacklist))
{
      echo "Coming Soon";
} else {
      echo "User Protected";
}
于 2012-12-31T05:20:57.367 回答
1

你可以这样做:

if (!in_array($name, mysql_fetch_array($sql))) {
    echo "Coming Soon";
} else {
    echo "User Protected";
}

但是您实际上应该在数据库级别执行此操作。这利用了数据库优化,不需要将整个表加载到内存中。

$query = mysql_query(sprintf(
    'SELECT 1 FROM `skype_bl` WHERE `username`="%s"',
    mysql_real_escape_string($name)
));

if (mysql_num_rows($query)) {
    // Username not available
}
于 2012-12-31T05:23:46.497 回答
1

我想你想比较是否$name在黑名单数组中。为此,您必须首先构建您的黑名单数组,然后进行比较$name。在您的代码中,它只是将名称与数组的当前内容进行比较,$blacklist而不是整个数组。

如果您正在迭代第一行,它会将结果集第一行的值添加到$blacklist$name仅与该元素进行比较。当它进入第二行时,它将结果集中第二行的值添加到数组中,因此这次它将与$name数组中的两个元素(结果集中的前两行)进行比较。它还将检查结果$name集中$blacklist的每次迭代。我不认为你想要这个。所以我们首先建立一个黑名单数组,然后只比较一次。

//building the $blacklist array
while($row = mysql_fetch_array($sql)){
    $blacklist[] = $row['username'];
}

//Comparing $name with all elements of $blacklist which is now a full list
if(!in_array($name,$blacklist)){
      echo "Coming Soon";
}else{
      echo "User Protected";
}
于 2012-12-31T05:54:14.763 回答