如何避免通过php向mysql重复输入数据?

如何避免通过php向mysql重复输入数据?,php,mysql,Php,Mysql,我们有一个表载体和一个简单的php表单。在插入数据之前,我会检查车辆注册号是否存在,但某些客户端pc可能会输入重复的条目。下面是代码片段。还有什么原因可能导致这种情况 $vehicleRegistrationNumber=$_POST['vehicleRegistrationNumber']; $selectQuery1 ="Select vehicleRegistrationNumber From Vehicle Where vehicleRegistrationNumber='".$vehi

我们有一个表载体和一个简单的php表单。在插入数据之前,我会检查车辆注册号是否存在,但某些客户端pc可能会输入重复的条目。下面是代码片段。还有什么原因可能导致这种情况

$vehicleRegistrationNumber=$_POST['vehicleRegistrationNumber'];
$selectQuery1 ="Select vehicleRegistrationNumber From Vehicle Where vehicleRegistrationNumber='".$vehicleRegistrationNumber."'"; 
$result1 = mysqli_query($link,$selectQuery1);
$row1 = mysqli_fetch_array($result1, MYSQL_ASSOC);
$n1 = mysqli_num_rows($result1);

if($n1 > 0) {
  $status="<span class=\"statusFailed\">: Vehicle ".$vehicleRegistrationNumber." Already Exist.</span>";
}
else {
  //insert codes
}
$VehiclerRegistrationNumber=$\u POST['VehiclerRegistrationNumber'];
$selectQuery1=“从车辆中选择车辆注册号,其中车辆注册号=”。$VehiclerRegistrationNumber。“”;
$result1=mysqli\u查询($link,$selectQuery1);
$row1=mysqli\u fetch\u数组($result1,MYSQL\u ASSOC);
$n1=mysqli\u num\u行($result1);
如果($n1>0){
$status=“:车辆“$VehiclerRegistrationNumber.”已存在;
}
否则{
//插入代码
}
请尝试使用分组方式

 $selectQuery1 ="Select vehicleRegistrationNumber From Vehicle Where vehicleRegistrationNumber='".$vehicleRegistrationNumber."' GROUP BY vehicleRegistrationNumber"; 
通过分组来尝试此方法

 $selectQuery1 ="Select vehicleRegistrationNumber From Vehicle Where vehicleRegistrationNumber='".$vehicleRegistrationNumber."' GROUP BY vehicleRegistrationNumber"; 

首先,您的代码容易受到SQL注入的攻击。通过提交类似于
XYZ0001'和1='0
或更多恶意值的内容,可以绕过此检查。要防止这种情况,请使用准备好的语句和param绑定,而不是字符串连接


另一种可能是用户的错误,例如,在数据库中的第一眼广告记录中很难发现尾随空格(
“XYZ001”!=“XYZ0001”
)。在DB中检查其存在性之前,您应该使用PHP检查提交的值是否只包含允许的字符,并且没有常见错误。

首先,您的代码容易受到SQL注入的攻击。通过提交类似于
XYZ0001'和1='0
或更多恶意值的内容,可以绕过此检查。要防止这种情况,请使用准备好的语句和param绑定,而不是字符串连接


另一种可能是用户的错误,例如,在数据库中的第一眼广告记录中很难发现尾随空格(
“XYZ001”!=“XYZ0001”
)。在检查其是否存在于数据库中之前,您应该使用PHP检查提交的值是否只包含允许的字符,并且没有常见错误。

最好的方法是在SQL端处理它。只需将字段定义为唯一索引

现在,当尝试插入重复索引时,将抛出一个错误,您可以按如下方式捕获它:

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }

这样可以避免在每次插入查询之前使用select查询。只需根据需要处理错误。

最好的方法是在SQL端处理它。只需将字段定义为唯一索引

现在,当尝试插入重复索引时,将抛出一个错误,您可以按如下方式捕获它:

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }


这样可以避免在每次插入查询之前使用select查询。只需根据需要处理错误。

为什么不在车辆注册号上使用唯一索引?通过这种方式mysql将为您处理此问题,您只需注意如果您尝试插入重复行时会出现的错误。是的,我现在已经在唯一索引上执行了此操作,但是通过浏览器该检查失败会有什么问题?为什么不在VehiclerRegistrationNumber上使用唯一索引?通过这种方式mysql将为您处理它,您只需注意如果您尝试插入重复行时会出现的错误。是的,我现在已经在唯一索引上这样做了,但是通过浏览器该检查失败会有什么问题?有趣的是,如果没有group by,您也应该能够检查,对吗?我的意思是您也可以通过php过滤重复项我知道你在使用php:)我给了你我的答案不获取重复项它没有帮助吗?你的查询,你忘了分组statment@echo_Samir你能解释一下为什么添加
groupby
会有帮助吗?有趣的是,如果没有groupby,你也应该能够检查正确吗?我的意思是你也可以通过php过滤重复项我知道你在使用php:)我给了你我的答案,不获取重复项它没有帮助吗?你的查询,你忘了分组statment@echo_Samir你能解释一下为什么添加
groupby
会有帮助吗?为什么以及查询结果有什么问题?我很好奇为什么它对我有效?可能没什么问题。只是建议一种避免对数据库进行额外查询的方法我很好奇为什么这么简单的查询会失败?select查询没有失败。但是,如果注册号不是唯一的密钥,则很容易插入重复项。当您说“非常容易”时,意味着在什么情况下它可能会失败?为什么以及查询结果有什么问题?我很好奇为什么它对我有效?可能没什么问题。只是建议一种避免对数据库进行额外查询的方法我很好奇为什么这么简单的查询会失败?select查询没有失败。但是,如果注册号不是唯一的密钥,则很容易插入重复项。当你说“非常容易”时,意味着在什么情况下它可能会失败?因此,我在进行此类检查时,几乎没有其他代码。那么,如何避免它们或加强它们的安全性呢?那么如何避免php中的常见错误以及sql注入中的错误呢?如果我将它们放在mysql\u real\u escape\u string()中,这将是一个很大的帮助吗?您在代码中使用的是
mysqli
,因此如果您坚持不使用prepared语句,请使用
mysqli\u real\u escape\u string
。您可以阅读有关sql注入的更多信息。至于常见的错误,你必须为所需的数据定义模式,并检查它是否符合你的要求,如果不符合,则用所需的格式提示用户。我一直在其他页面中使用mysqli\u real\u escape\u string它。它是否足够安全,或者我是否应该转移到预先设置好的语句中?因此,我在进行此类检查时,几乎没有其他代码。那么,如何避免它们或加强它们的安全性呢?那么如何避免php中的常见错误以及sql注入中的错误呢?如果我将它们放在mysql\u real\u escape\u string()中,这将是一个很大的帮助吗?您在代码中使用的是
mysqli
,因此如果您坚持不使用prepared语句,请使用
mysqli\u real\u escape\u string
。您可以阅读有关sql注入的更多信息。至于常见的错误,您必须为所需的数据定义模式,并检查它是否符合您的要求,如果不符合,则p