0

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

$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
}
4

3 回答 3

1

The best way is to handle it on the SQL side. Just define the field as UNIQUE INDEX.

Now when trying to insert a duplicate index an error will be thrown and you can catch it like this:

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

Like this you can avoid the select query before every insert query. Just handle the error as you want.

于 2013-06-21T19:15:27.227 回答
1

用 group by 试试这个

 $selectQuery1 ="Select vehicleRegistrationNumber From Vehicle Where vehicleRegistrationNumber='".$vehicleRegistrationNumber."' GROUP BY vehicleRegistrationNumber"; 
于 2013-06-21T18:16:00.613 回答
1

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

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

于 2013-06-21T19:02:20.647 回答