php mysql上次访问

时间:2014-07-09 23:00:52

标签: php mysql login

我有一个网站,用户可以在每次登录时显示他最后一次访问该网站。 数据库中last_activity列的类型是'time'。

我制作了一个显示当前日期的代码,并将其保存在变量$ currentDate

然后将变量$ currentDate设置为数据库中的last_activity列,并在每次用户登录时更新列。

但是当我测试代码时,我得到了这个结果:

您上次访问:00:00:00

数据库中last_activity列的类型是'time'。

这是我的代码:

<?php
session_start();

include('db.php');

date_default_timezone_set('Asia/Riyadh');   
$currentDate = date('m/d/Y h:i:s a', time());


if(isset($_SESSION['Email']) === true)
{
    mysql_query("UPDATE `table` SET `lastactivity` = ".$currentDate." WHERE email = '".$_SESSION['Email']."'");   

    $query = "SELECT * FROM `table` WHERE email = '".$_SESSION['Email']."'";
    $run = mysql_query($query);  

    while($row = mysql_fetch_array($run))
    {
        $name = $row[1]; 
        $active = $row[10];

        echo 'welcome '.$name;
        echo 'your last visit '.$active;
        ;

1 个答案:

答案 0 :(得分:2)

您应该使用DATETIMETIMESTAMP类型来存储日期时间值而不是TIMETIME数据类型没有日期概念:

  

The TIME Type

     

MySQL在&#39; HH:MM:SS&#39;中检索并显示TIME值。格式(或   &#39; HHH:MM:SS&#39;大小时值的格式)。 TIME值的范围可以从   &#39; -838:59:59&#39;到&#39; 838:59:59&#39;。

     

...

     

无效的TIME值会转换为&#39; 00:00:00&#39;

因为你得到了

your last visit: 00:00:00

从数据库返回作为输出。

  

DATE, DATETIME, and TIMESTAMP Types

     

DATETIME类型用于包含日期和时间的值   部分。 MySQL在&#39; YYYY-MM-DD中检索并显示DATETIME值   HH:MM:SS&#39;格式。支持的范围是&#39; 1000-01-01 00:00:00&#39;至   &#39; 9999-12-31 23:59:59&#39;。

修改

TIMESTAMP并且在较新的MySQL版本DATETIME列中有很好的功能,即自动更新:

  

Automatic Initialization and Updating for TIMESTAMP and DATETIME

     

从MySQL 5.6.5开始,TIMESTAMP和DATETIME列可以自动生成   初始化并更新到当前日期和时间(即,   当前时间戳)。在5.6.5之前,这仅适用于TIMESTAMP,和   每个表最多一个TIMESTAMP列。

编辑2:

进一步产生

$currentDate = date('m/d/Y h:i:s a', time());

没有DATETIME字面值的有效格式。您可以使用STR_TO_DATE()将您的值转换为DATETIME,但我不建议这样做。最好使用MySQL函数NOW()更改UPDATE语句:

    mysql_query("UPDATE `table` SET `lastactivity` = NOW() WHERE email = '".$_SESSION['Email']."'");   

您可以格式化DATETIME值,同时使用DATE_FORMAT()从MySQL检索它,并为此计算列命名:

$query = "SELECT *, DATE_FORMAT(lastactivity, '%m/%d/%Y %h:%i%s %p') as last_activity FROM `table` WHERE email = '".$_SESSION['Email']."'";
$run = mysql_query($query);  

while($row = mysql_fetch_array($run))
{
    $name = $row[1]; 
    $active = $row["last_activity"];   // access to the column by column name
    // ...

注意 我建议使用预处理语句和占位符从已弃用的mysql_ *函数切换到PDO或mysqli,而不是连接sql语句。