我有一个网站,用户每次登录时都可以显示他最后一次访问该网站。数据库中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;
;
您应该使用类型DATETIME
或TIMESTAMP
来存储日期时间值,而不是TIME
。TIME
数据类型没有日期的概念:
时间类型
MySQL检索并显示'HH:MM:SS'格式的TIME值(或'HHH:MM:SS'格式用于大小时值)。时间值的范围可以从'-838:59:59'到'838:59:59'
…
无效时间值被转换为'00:00:00'
因此你得到
your last visit: 00:00:00
从数据库中返回作为输出。
编辑:DATE, DATETIME和TIMESTAMP类型
DATETIME类型用于同时包含日期和时间的值部分。MySQL检索并显示YYYY-MM-DD格式的DATETIME值HH: MM: SS的格式。取值范围为:10001-01 00:00:00 ~9999-12-31 23:59:59。
TIMESTAMP
和在较新的MySQL版本DATETIME
列有很好的功能,即自动更新:
TIMESTAMP和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语句的连接。