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

あなたはこれを行うことができます:

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配列全体ではなく、配列の現在の内容と名前を比較しているだけです。

最初の行を反復している場合、結果セットの最初の行の値が追加され、その 1 つの要素だけ$blacklistと比較されます。$name2 行目に移動すると、結果セットの 2 行目の値が配列に追加されるため、今回は$name配列の 2 つの要素 (結果セットの最初の 2 行) と比較されます。また、結果セットの反復ごとにチェックイン$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 に答える
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 に答える