PHP 总是正确插入数据,但一旦失败并插入重复数据?

标签 php mysql

我有这个 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 个具有相同数据的记录。

关于PHP 总是正确插入数据,但一旦失败并插入重复数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55603095/

相关文章:

php - 模型忽略主键属性

java - SQL/Java : Upon attempting to save data to tables will not add to tables

php - key '2147483647' 的重复条目 'PRIMARY'

php - 数据质量和验证所需的建议

php - 如何在 paginationControl 中指定带有参数的路由?

php - 与用户一起创建单元测试

php - 在 php for 循环中只显示来自 mysql 数据库的一行?

php - SELECT 行 LIKE 标记和带有偏移量的 LIMIT

php - php 标签系统的问题

php - WordPress Admin : When placing a Custom Post Type as a submenu of a parent menu, 父菜单链接被 CPT 覆盖