我在将数据保存到数据库时遇到问题。我的情况是,当我将数据保存到数据库表(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 =“在此处输入图像描述”>
永远不要仅依靠SELECT的结果来确定记录是否唯一。在SELECT完成和后续的INSERT完成之间,另一个进程可能会插入具有相同值的记录,然后重复。您应确保通过使用UNIQUE
约束来确保数据库字段中唯一值的only方法。实现各不相同,但是here是MySQL中的一个示例。
在具有UNIQUE
约束的情况下,重复的INSERT尝试将失败,因此您需要确保您正在检查所有数据库函数调用的返回状态。
还请注意,您的代码容易受到SQL injection攻击。您应该通过mysqli或PDO使用带有绑定参数的准备好的语句。 This post有一些很好的例子。