如何避免重复数据通过PHP进入mysql?

时间:2013-06-21 18:05:23

标签: php mysql

我们有一个桌面车辆和一个简单的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
}

3 个答案:

答案 0 :(得分:1)

尝试使用group by

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

最好的方法是在SQL端处理它。只需将字段定义为UNIQUE INDEX。

现在,当尝试插入重复索引时,将抛出错误,您可以像这样捕获它:

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

像这样,您可以在每次插入查询之前避免选择查询。只需根据需要处理错误。