php / MySQL INSERT执行两次

时间:2017-02-03 00:50:01

标签: php mysql

我尝试了各种方式,如对象和非对象,以及网络上的多个示例。我知道以前曾经问过这个问题,但由于某些原因,没有什么能解决我的问题。我以前做了大量的INSERTS,之前从未遇到过这个问题。

我只是想记录IP地址和推介网址,以帮助打击adwords欺诈/破坏,但由于某种原因,它被执行了两次。第一次,推荐是空白的,第二次推荐网址本身。

以下是我目前使用的代码:

$db = 'defensalegal';
$table = 'dogbite_tracker';

$ip = $_SERVER['REMOTE_ADDR'];
$referer = $_SERVER['HTTP_REFERER'];

$conn = new mysqli($host, $user, $pass, $db);

$conn->query('INSERT INTO '.$table.' (ID, ip, views, timestamp, referer) VALUES("", "'.$ip.'", "1", "'.date('Y-m-d').' @ '.date('H:i:s').'", "'.$referer.'")');
$conn->close();

我已经验证它不是刷新问题,因为当你直接输入网址的时候也是这样做的,我还擦除了除上述代码片段之外的所有内容的整个文件,以防万一发生某种冲突,仍然有重复的插入。

我也没有收到任何错误。

2 个答案:

答案 0 :(得分:0)

快速修复将是

CREATE UNIQUE INDEX index_ip_timestamp_referer ON dogbite_tracker(ip, timestamp, referer);

这是您的问题的快速解决方案,在您的数据库服务器(SQL控制台)上运行此查询

要获得确切的解决方案,您需要发布完整的脚本(代码)。

答案 1 :(得分:-2)

看起来您的脚本可以进行重复插入,如前所述,使脚本应该具有唯一索引     1.检查以前的ip是否已经存在于数据库中     2.如果存在,则更新ip     3.如果ip不存在,则插入new