在单击按钮的同时以html格式输入数据以在数据库中添加数据后,我想检查用户是否已存在于数据库中。我使用的是php v5.3.5和mysql v5.5.8。 数据存储在同时命名为person和other的2个表中,并且没有主键(在两列中),因为没有可以被视为主键的列 谁能帮助我怎么做?
代码是::
$sqlComm="Insert into person(Name,father_name,date_birth,
gender,Res_Address,Mobile_no)
values('$name','$fatherName','$dob',
'$gender1','$resAddress','$mobileNo')";
$sql="insert into other_staff(p_id,employer,off_ph_no)
values('$pId','$employer1','$phOffice')";
为每个人自动生成Id,并将其作为p_id检索并存储在其他表中。 name,father_name,date_birth,雇主的组合可以是独一无二的。
答案 0 :(得分:0)
似乎所建议的字段都不是主键,它们中的任何一个或它们的组合都不能唯一地标识一个人。这是一个非常奇怪的数据库设计,我恳请您检查数据库设计。
您必须通过执行单独的选择查询来查找用户是否存在。还要确保两个语句都在事务中执行。
答案 1 :(得分:0)
您必须考虑使您的架构/应用程序具有独特性的原因。更改手机号码可能不会使一个人成为新人,但如果我们分享名称,father_name,date_birth和性别,我是否与现有人员相同?如果是这样,那么将它设为一个唯一的密钥,您将拥有数据库可以告诉您的内容,它已经存在。万一你还不知道:密钥可以跨多个列。
答案 2 :(得分:0)
尽管有一个糟糕的架构,我们可以找到一种方法(如下所示)来检查用户是否存在的天气。但我认为你也想检查第二个表,特定用户是否有雇主。这是数据库中的问题,因为PERSON 或 OTHER_STAFF表中没有列可以告诉我们特定用户的特定雇主 PERSON表
解决方案:但是对于这种情况,您可以使用交叉连接来获得几乎正确的结果:
if($result=mysql_query("SELECT 1 FROM person p CROSS JOIN other_staff e WHERE p.name='$name' AND p.father_name='$father_name' AND p.date_birth='$dob' AND p.gender='$gender1' AND p.Res_Address='$resAddress' AND p.Mobile_no='$mobileNo' AND e.employer='$employer1' AND e.off_ph_no='$phOff';")){
if(mysql_fetch_array($result)){
//exist
}else{
//not exist
}
}
建议:下次在PERSON和OTHER STAFF表中存储自动生成的ID 但是对于此项目如果您可以将p_id
存储在PERSON表中,那么这查询将在存在时返回1,否则为null(上面相同):
$sql="SELECT 1 FROM person p LEFT JOIN other_staff e ON p.p_id=e.p_id WHERE p.name='$name' AND p.father_name='$father_name' AND p.date_birth='$dob' AND p.gender='$gender1' AND p.Res_Address='$resAddress' AND p.Mobile_no='$mobileNo' AND e.employer='$employer1' AND e.off_ph_no='$phOff';";