我有以下表格结构:
recid int(11)
userid int(11)
reset_requested_on timestamp CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
valid_until timestamp
sessionid varchar(255)
当我print_r我的数组,我有这个数据:
Array
(
[userid] => 428
[reset_requested_on] => 1361961459
[valid_until] => 1362134259
[sessionid] => b6d444e0ea14768a724308fd1aa64b6d
)
当我执行insert时,只有recid, user id和sessionid被插入,而时间戳字段为空。有人能告诉我我做错了什么吗?
编辑:当我手动添加记录时,如果我在时间戳字段中选择from_unix时间,我将得到正确插入的记录。有谁知道我如何将这个选项设置为表中的默认值?
问候,Zoran
您是否尝试过传递日期而不是秒数?
基本上,在MySQL上使用FROM_UNIXTIME(1362134259)或在php上使用strtotime("Y-m-d H:i:s",1362134259)。
我不太熟悉codeigniter,但我假设是这样的:
$data = array(
'userid' => 428,
'reset_requested_on' => date("Y-m-d H:i:s"),
'valid_until' => date("Y-m-d H:i:s"),
'sessionid' => 'b6d444e0ea14768a724308fd1aa64b6d'
);
应该可以正常工作。
时间戳和datetime之间的主要区别在于数据如何在内部保存。时间戳字段保存为自Unix纪元以来以32位整数形式存储的秒数(因此它很容易受到y2k38错误的攻击),而日期时间字段保存为已知格式以表示日期。datetime字段的数学运算比时间戳字段更昂贵,但从"客户端"的角度来看,除非您使用的日期晚于2038年,否则它们基本上是相同的。因此,离开PHP并进入MySQL的查询应该具有预期格式的日期,如"Y-m-d H:i:s"。
插入时是否遗漏了时间戳的引号(")?
"1362134259"
我不确定。试试这个方法。
$newdata = array('userid' => $data['userid'],
'reset_requested_on' => "$timestamp",
'valid_until' => "$new_timestamp",
'sessionid' => $this->session->userdata('session_id'));