我需要防止重复的数据被输入我基于以下几点:;名、姓和电话

yhxst69z  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(245)

我需要有一个功能,检查重复条目的基础上,以下领域:名字,姓氏和电话我试图通过论坛,但似乎找不到帮助。

<?
function do_data_entry($data){
global $conn;
$sql = "INSERT INTO entry_details (reg_type,mem_id,title,first_name,middle_name,last_name,address,tel,email,position,place_work,mem_cat,mem_fee,sub_date,next_date_sub,district,mem_status,mem_status_reason) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssssssssssssssssss',$reg_type,$mem_id,$title,$first_name,$middle_name,$last_name,$address,$tel,$email,$position,$place_work,$mem_cat,$mem_fee,$sub_date,$next_date_sub,$district,$mem_status,$mem_status_reason);

//这将从代码中选取发布的数据(以下面不同的形式)

if(is_loggedIN() == 'user'){
redirect('../index.php');
}else if(is_loggedIN() == 'admin'){
if(isset($_POST['add_entry'])){
$data['reg_type'] = $_POST['reg_type'];
$data['mem_id'] = $_POST['mem_id'];
$data['title'] = $_POST['title'];
$data['first_name'] = $_POST['first_name'];
$data['middle_name'] = !isset($_POST['middle_name']) ? "" : $_POST['middle_name'];
$data['last_name'] = !isset($_POST['last_name']) ? "" : $_POST['last_name'];
$data['address'] = !isset($_POST['address']) ? "" : $_POST['address'];
$data['district'] = $_POST['district'];
$data['tel'] = !isset($_POST['tel']) ? "" : $_POST['tel'];
$data['email'] = !isset($_POST['email']) ? "" : $_POST['email'];
$data['position'] = !isset($_POST['position']) ? "" : $_POST['position'];
$data['place_work'] = !isset($_POST['place_work']) ? "" : $_POST['place_work'];
$data['mem_cat'] = $_POST['mem_cat'];
$data['mem_fee'] = $_POST['mem_fee'];
$data['sub_date'] = $_POST['sub_date'];
$data['next_date_sub'] = $_POST['next_date_sub'];
$data['mem_status'] = $_POST['mem_status'];
$data['mem_status_reason'] = $_POST['mem_status_reason'];
if(do_data_entry($data)){
        $_SESSION['message'] = "Entry created successfully";
        redirect('data_entry.php');
    }else{
        $_SESSION["message"] = "User already exists. Try different name";
    }
}
}else{
redirect('../login.php');
}
gxwragnw

gxwragnw1#

在听从同事的指导之后,我使用phpmyadmin进入mysql数据库,打开我想要应用设置规则的表结构,选择列(first\u name、last\u name和tel),然后在下面选择“unique”,它应用了更改,我再次选择了我选择的列,这次选择了“索引”。它现在完全按照我想要的方式工作。非常感谢你们的支持。

laawzig2

laawzig22#

最简单、最直接的解决方案是创建一个由first\u name+last\u name+tel列组成的主键。之后,当您尝试插入完全相同的组合时,数据库(无论是什么)约束将引发错误,而insert将失败。
希望有帮助。
编辑:另一个(较差的)解决方案可能是:
在执行insert之前,访问一个存储的sql函数,该函数将检查您想要的内容。
sql函数应该是这样的:

...
declare @someVariable int
select @someVariable = count(*) from table t 
where (t.FirstName = send_parameterFirstName) AND 
      (t.LasttName = send_parameterLastName) AND 
      (t.tel = send_parameterTel) 

if @someVariable > 0
  return -1 
else 
  return 1
....

如果得到-1,则不执行插入….:)当然你应该自己编写代码,但我仍然认为主键是最好的解决方案,而第二个解决方案只是一个糟糕的解决方案。您可以在这里看到如何从php访问存储的sql函数:access sql functions from php

相关问题