我们有一个桌面车辆和一个简单的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
}
答案 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));
}
像这样,您可以在每次插入查询之前避免选择查询。只需根据需要处理错误。