php - PHP一直插入数据但一旦失败并插入重复?
问题描述
我有这个 PHP 代码,它应该检查站点统计信息并记录所有访问。一切都很好,但我偶然发现有一个双重插入并且我无语,具有相同的 IP 和日期。
$ip = $_SERVER['REMOTE_ADDR'];
$date = date("Y-m-d");
$time = time();
$stmt = mysqli_prepare($dbconnect, "SELECT id FROM traffic WHERE ip=? && date=? LIMIT 1");
mysqli_stmt_bind_param($stmt, 'ss', $ip, $date);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$res=mysqli_stmt_num_rows($stmt);
if ($res == 0) {
$inser = mysqli_prepare($dbconnect, "INSERT INTO traffic (ip,date,time) VALUES (?, ?, ?)");
mysqli_stmt_bind_param($insert, 'ssi', $ip, $date, $time);
mysqli_stmt_execute($insert);
mysqli_stmt_close($insert);
}else {
mysqli_stmt_bind_result($stmt, $id);
mysqli_stmt_fetch($stmt);
$update = mysqli_prepare($dbconnect, "UPDATE traffic SET pages=pages+1, time=? WHERE id=? LIMIT 1");
mysqli_stmt_bind_param($update, 'ii', $id, $time);
mysqli_stmt_execute($update);
mysqli_stmt_close($update);
}
mysqli_stmt_close($stmt);
更准确
解决方案
您的代码可以在短时间内连续调用两次,然后运行第一次选择,得到 0 个结果,然后插入一条记录。第二个选择在插入第一条记录之前并行运行,因此也得到 0 个结果,因此它运行插入 - 您现在有 2 条具有相同数据的记录。
推荐阅读
- python - wet_lapse 出现错误“IndexError:标量变量的索引无效。” 并且没有理由应该
- javascript - 用css创建动态四分之一圆
- php - 如何从多个表中删除主键
- algorithm - 最小化最大延迟的调度算法是最优的(它找到一个可行的调度,如果存在的话)
- html - 带有 & 参数的 HTML GET
- flutter - Flutter 扫描二维码不显示相机
- google-cloud-platform - 在 gcloud beta 运行部署时传递服务名称
- c# - 在 Visual Studio 中查看 ASP NET Core 源代码?
- microsoft-graph-api - Microsoft Teams 无法获取群聊成员
- c1-cms - 如何获取当前登录用户的 C1 CMS 用户名,而不是 windows 用户