我有一个脚本,它应该从我的sql表中的字段“UserID”中收集数据,将所有数据提交到数组中,然后将变量与数组中的whats进行比较。如果变量的值已经在数组中,请告诉用户该值无效。
$sql = "SELECT *" //User info
. " FROM Users" ;
$result = mysql_query($sql);
//insert where line for assessorid
$users = array();
while(($user = mysql_fetch_assoc($result))) {
$users[] = $user;
}
foreach($users as $user){
$user['UserID'];
}
我需要$ users的输出等同于array('user1','user2','user3'); 发生的事情是数据来自$ user_name的表单。我想在如下声明中使用它:
if(in_array($user_name,$users)){
echo "username available"
}
else{
echo "not available"}
我尝试使用提取功能,但这只会造成很大的混乱。 我不确定我正在做什么是不正确的,除非$ user作为数组的格式无法在in_array()函数中解析,因为它是当前格式化的。任何建议都非常感谢。谢谢!
答案 0 :(得分:1)
$sql = "SELECT USERID FROM Users" ;
$result = mysql_query($sql);
$users = array();
while(($user = mysql_fetch_assoc($result))) {
$users[] = $user['USERID'];
}
当你说
时$users[] = $user;
您没有指定结果集中的哪一列要附加到数组中。
答案 1 :(得分:0)
也许我错过了什么......为什么不这样做:
SELECT UserID FROM Users WHERE Username = 'username'
然后只需使用mysql_num_rows()检查用户名是否已存在。这应该更快,更有效(内存方面)。
答案 2 :(得分:0)
在这种情况下,您从数据库中收集所有数据,并且还需要在PHP中进行一些低效的处理。最好查询该值以查看它是否在数据库中,因此:
$username = mysql_real_escape_string($username);
$query = "
select
count('x') as usercount
from
users u
where
u.username = '$username'";
如果'usercount'为0,则用户名不存在。如果> 0,用户名确实存在。这样,您就让数据库完成它的设计工作,而实际检索的唯一值就是单个数字。
答案 3 :(得分: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
答案 4 :(得分:0)
您是否正在尝试编写一个脚本来检查是否使用了用户名?
如果是这样,为此目的构建实际查询可能更容易(也更有效),而不是依赖于程序化方法。
$sql = "SELECT COUNT(*) FROM Users WHERE Username = '$username'";
然后,您可以将此结果应用于计数,并允许用户注册或不注册是否返回大于零的值(用户已使用该名称)或不是(其免费)。
答案 5 :(得分: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