我有一个网站,用户可以在每次登录时显示他最后一次访问该网站。 数据库中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;
;
答案 0 :(得分:2)
您应该使用DATETIME
或TIMESTAMP
类型来存储日期时间值而不是TIME
。 TIME
数据类型没有日期概念:
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语句。