Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅当当天和该用户的行不存在时才插入行_Php_Mysql_Time - Fatal编程技术网

Php 仅当当天和该用户的行不存在时才插入行

Php 仅当当天和该用户的行不存在时才插入行,php,mysql,time,Php,Mysql,Time,当有人第一次访问X页面时,我会在表中插入一个带有当前unix time()戳的新行 我想每24小时为该用户插入新行。。例如: 示例A)Bob,转到我的站点,它插入一行。。12小时后,Bob回来了,它没有插入新行,因为24小时还没有过去 示例B)Bob,转到我的站点,它插入一行。。24小时后,Bob回来了,24小时过去了,它确实插入了一个新行 我在玩弄这个,但由于我的大脑被炸了,我无法思考这是否正确 $time = time(); $difference = 86400; $timediffere

当有人第一次访问X页面时,我会在表中插入一个带有当前unix time()戳的新行

我想每24小时为该用户插入新行。。例如:

示例A)Bob,转到我的站点,它插入一行。。12小时后,Bob回来了,它没有插入新行,因为24小时还没有过去

示例B)Bob,转到我的站点,它插入一行。。24小时后,Bob回来了,24小时过去了,它确实插入了一个新行

我在玩弄这个,但由于我的大脑被炸了,我无法思考这是否正确

$time = time();
$difference = 86400;
$timedifference = $time + $difference;
插入行时:

mysql_query("INSERT INTO `logs` (`time`, `who`, `site`, `type`) 
VALUES('" . $timedifference . "', '" . $ip . "', '" . $rid . "', 'out') ") 
or die(mysql_error()); 
检查是否已持续24小时或更长时间时:

mysql_query("SELECT * FROM `logs` 
WHERE `time` < '" . time() . "' AND `type` = 'out' 
AND `site` = '" . $rid . "' AND `who` = '" . $ip . "'");
mysql\u查询(“从'logs'中选择*
其中'time`<'.time().''和'type`='out'
以及"site `='“$rid.”和"who `='“$ip.”;
谁能告诉我这是不是对的

  • 我将插入
    $time
    ,而不是
    $timedifference
  • 您需要检查
    time
    是否小于
    time()-86400
    。如果创建了
    time
    a
    datetime
    列,则可以直接在查询中执行此操作

  • 在上一次查询中,您没有检查是否有超过24小时的条目,您只是检查是否有比现在旧的条目

    正确的程序是:

    在登录时间的记录上创建索引。
    通过此升序索引为用户(“谁”)选择最后一条记录。
    如果有最后一条记录,并且距离现在不到24小时(time()),则跳过创建新记录。
    否则,现在就创建一个(time())。

    试试看

    insert ignore into logs
      select unix_timestamp(now()), who, site, type
      from logs
      where 
      who='{$ip}' and 
      site='{$rid}' and
      type='out' and
      unix_timestamp(time)<=unix_timestamp(now())-86400 limit 1;
    
    在日志中插入忽略
    选择unix_时间戳(now())、用户、站点、类型
    从日志
    哪里
    谁=“{$ip}”和
    site='{$rid}'和
    键入“out”和
    
    unix_timestamp(time)这是我想到的。。这似乎有效:

    //log check
    $ip = ip2long($_SERVER['REMOTE_ADDR']);
    $time = time(); //current time
    $difference = 86400; //one day in seconds
    $timedifference = $time + $difference; //time difference
    $logQ = mysql_query("SELECT * FROM `logs` WHERE `time` > '" . time() . 
            "' AND `type` = 'out' AND `site` = '" . $id . 
            "' AND `who` = '" . $ip . "'");
    $logR = mysql_num_rows($logQ);
    if ($logR <= 0){
      mysql_query("INSERT INTO `logs` (`time`, `who`, `site`, `type`) VALUES('" . 
      $timedifference . "', '" . $ip . "', '" . $id . "', 'out') ") or 
      die(mysql_error());  
    }
    
    //日志检查
    $ip=ip2long($_服务器['REMOTE_ADDR']);
    $time=time()//当前时间
    $difference=86400//以秒计一天
    $timedifference=$time+$difference//时差
    $logQ=mysql\u查询(“从`logs`中选择*WHERE`time`>”。time()。
    “'和'type`='out'和'site`='”$id。
    “'和'who`='”$ip.“”;
    $logR=mysql\u num\u行($logQ);
    
    如果($logR)
    时间
    字段有什么类型?很好,请确保web服务器和数据库服务器的时间都是synchronized@ajreal:NTP在这方面非常有效-您甚至可以让一台服务器与另一台服务器同步。但这是一个非常不同的问题:)