2010-12-13 32 views
0

我有一个脚本,其后应该从我的sql表中的字段“UserID”收集数据,将所有数据提交到数组中,然后将变量与数组中的值进行比较。如果变量的值已经存在于数组中,请告诉用户该值无效。我需要$ users的输出等同于数组('user1','user2','user3'); 发生了什么是数据从$ user_name形式进来。我想要在如下声明中使用它:使用foreach函数格式化数组输出

我试过使用提取函数,但那只是创建了一个大混乱。 林不知道什么是我在做什么不正确,除非作为一个数组的$用户的格式不能被解析in_array()函数,因为它是目前的格式。任何意见非常感谢。谢谢!

回答

0

也许我失去了一些东西......为什么不去做这样的:

SELECT UserID FROM Users WHERE Username = 'username' 

那么就使用mysql_num_rows()检查,如果用户名已经存在。这应该更快,更高效(记忆方面)。

1
$sql = "SELECT USERID FROM Users" ; 

$result = mysql_query($sql); 

$users = array(); 

while(($user = mysql_fetch_assoc($result))) { 
$users[] = $user['USERID']; 
} 

当你说

$users[] = $user; 

你是不是在结果集被追加到数组,指定哪一列。

0

在这种情况下,您将收集数据库中的所有数据,并且还需要在PHP中执行一些效率低下的处理。这是更好地查询该值,看它是否是在数据库中,所以:

$username = mysql_real_escape_string($username); 
$query = " 
    select 
    count('x') as usercount 
    from 
    users u 
    where 
    u.username = '$username'"; 

的,如果'USERCOUNT位为0,用户名不存在。如果> 0,则用户名确实存在。通过这种方式,您可以让数据库执行其设计要完成的工作,而实际上被检索的唯一值就是该单一数字。

0

你试过修改你的查询吗?目前,您已获得每个用户的所有值,但您刚刚看到需要UserID。你可以这样做:

$sql = "SELECT UserID FROM Users"; 
$result = mysql_query($sql); 

$users = array(); 

while(($user = mysql_fetch_assoc($result))) 
{ 
    $users[] = $user['UserID']; 
} 

// ... 
if (in_array($user_name, $users)) 
{ 
    echo 'Username not available'; 
} 
else 
{ 
    echo 'Username available'; 
} 

或者您也可以查找在数据库中指定用户名:

$sql = 'SELECT count(*) FROM Users WHERE UserID = '.mysql_escape_string($user_name); 
$result = mysql_query($sql); 

// and then just check if the resulting row is equal to 0 
0

您是否试图写一个脚本,如果用户名是采取将检查?

如果是这样,那么为实现此目的而构建实际查询可能更容易(也更有效),而不是依赖于程序化方法。

$sql = "SELECT COUNT(*) FROM Users WHERE Username = '$username'"; 

然后,你可以这样的结果适用于数量,并允许用户基于某个值是否大于零(用户已经采取了这个名字)或没有(其免费)返回注册或没有。

+0

当然,你不应该把未经过转义的$用户名放入你的SQL中,除非你急于找出其他人可以通过SQL注入来做什么。 – 2010-12-13 20:29:35

+0

当然 - 我仅仅提供这个作为COUNT查询的一个例子,因为OP似乎没有意识到它。这永远不会用于插入或验证登录。我通常在所有数据库访问中使用PDO来证明这一点。 – DeaconDesperado 2010-12-13 20:31:57

0

如前所述,这是检查现有用户名的一种相当低效的方式。修改你的查询的建议是很好的建议。

然而,为了解决与你提供的代码的问题:

in_array()将不检测在一个多维数组的值的存在。你$users阵列可能看起来是这样的:

$users = array(
    array('userID', 'foo', 'bar'), 
    array('userID', 'foo', 'bar'), 
    array('userID', 'foo', 'bar') 
) 

in_array不会搜索第一套指标以下。如果这真的是你想要做的,看到这个问题:in_array() and multidimensional array