【问题标题】:MySQL Array with PHP带有 PHP 的 MySQL 数组
【发布时间】:2012-12-31 05:18:40
【问题描述】:

我有一个这样的 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";
    }
 }

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

【问题讨论】:

  • 请不要使用mysql_* 函数编写新代码。它们不再维护,社区已经开始deprecation process。看到 red box 了吗?相反,您应该了解prepared statements 并使用PDOMySQLi。如果你不能决定哪一个,this article 会帮助你。如果你选择 PDO,here is good tutorial.
  • 谁能告诉我 $name 变量在哪里定义?我看不到它的定义!
  • 他可能没有将其包含在他的帖子中,Aspiring Aqib
  • 否则他会得到未定义的变量错误:)

标签: php mysql database arrays


【解决方案1】:

使用这个

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

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

【讨论】:

    【解决方案2】:

    你可以这样做:

    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
    }
    

    【讨论】:

      【解决方案3】:

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

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

      //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";
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-08
        • 2011-11-24
        • 2014-03-30
        • 2017-10-23
        • 2012-06-21
        • 2012-06-12
        • 1970-01-01
        相关资源
        最近更新 更多