如何检查数据库中的重复用户名?

问题描述 投票:0回答:1

我在将数据保存到数据库时遇到问题。我的情况是,当我将数据保存到数据库表(user)中时,新的用户名不能与表中存在的用户名相同。下面是我的代码,用于检查插入用户名是否与现有用户名相同(如果不相同),然后可以将其插入表中,但是我的代码不起作用,任何人都可以指导我弄错了哪一部分。谢谢:

save

$arr_val = $_POST;
$arr_val = $_POST;

$loc = $arr_val['loc'];
$action = $arr_val['action'];
$id = $arr_val['id'];
$type = $arr_val['type'];

unset($arr_val['loc']);
unset($arr_val['action']);
unset($arr_val['filter_id']);
unset($arr_val['type']);
$table = 'user';
if ($action == 'save') {

$query_user = mysqli_query($mysql_con, 'SELECT * FROM user WHERE username="' . $arr_val['username'] . '"');
$num_user = mysqli_num_rows($query_user);


if(count($num_user)>0){
                        echo "Duplicate username";
                    }elseif($num_user == 0) {
$key_relationship_1[] = 'is_active';
$val_relationship_1[] = convert_db_value('1');
$key_relationship_1[] = 'user_type';
$val_relationship_1[] = convert_db_value('1');
$key_relationship_1[] = 'created';
$val_relationship_1[] = convert_db_value($cur_dt);
$key_relationship_1[] = 'createdby';
$val_relationship_1[] = convert_db_value($user_name);
$key_relationship_1[] = 'modified';
$val_relationship_1[] = convert_db_value($cur_dt);
$key_relationship_1[] = 'modifiedby';
$val_relationship_1[] = convert_db_value($user_name);
$key_relationship_1[] = 'username';
$val_relationship_1[] = convert_db_value($_POST['username']);
$key_relationship_1[] = 'name';
$val_relationship_1[] = convert_db_value($_POST['name']);
$key_relationship_1[] = 'email';
$val_relationship_1[] = convert_db_value($_POST['email']);

$row_insert = db_conn_insert('user', $key_relationship_1, $val_relationship_1);
$sql_insert = $row_insert['sql'];
$error_insert = $row_insert['error'];
$record_id = $row_insert['record_id'];


unset($key_relationship_1);
unset($val_relationship_1);
                    }
elseif ($row_insert) {
    echo 'Saved successfully';

}

输出如下所示:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9wYXdhby5wbmcifQ==” alt =“保存的输出”>

此输出我尝试在表“ user”中插入相同的用户名。

如果删除“计数”,则输出如下所示:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9IUjUwTC5wbmcifQ==” alt =“在此处输入图像描述”>

php insert save
1个回答
0
投票

永远不要仅依靠SELECT的结果来确定记录是否唯一。在SELECT完成和后续的INSERT完成之间,另一个进程可能会插入具有相同值的记录,然后重复。您应确保通过使用UNIQUE约束来确保数据库字段中唯一值的only方法。实现各不相同,但是here是MySQL中的一个示例。

在具有UNIQUE约束的情况下,重复的INSERT尝试将失败,因此您需要确保您正在检查所有数据库函数调用的返回状态。

还请注意,您的代码容易受到SQL injection攻击。您应该通过mysqliPDO使用带有绑定参数的准备好的语句。 This post有一些很好的例子。

© www.soinside.com 2019 - 2024. All rights reserved.