我有此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)
您的代码可能会短时被调用两次,然后运行第一个选择,获得0个结果,并插入一条记录。第二个选择正好在插入第一个记录之前并行运行,因此也会获得0个结果,因此它会运行插入-您现在有2个记录具有相同的数据。