Php 希望仅从数据库中的时间戳中保存年份

Php 希望仅从数据库中的时间戳中保存年份,php,sql,codeigniter,phpmyadmin,Php,Sql,Codeigniter,Phpmyadmin,我只想在我的数据库中将年份保存为date\u created,类型为currenttimestamp 我从selecthtml中获取年度值。 得到值后,我将把它传输到控制器 这是我的密码 $registered_year = sanitize($this->input->post('registered_year')); $registered_year2 =". $registered_year .-00-00 00:00:00"; $app_type = 1; $ref_no =

我只想在我的数据库中将年份保存为
date\u created
,类型为
currenttimestamp

我从
select
html中获取年度值。 得到值后,我将把它传输到控制器

这是我的密码

$registered_year = sanitize($this->input->post('registered_year'));
$registered_year2 =". $registered_year .-00-00 00:00:00";
$app_type = 1;
$ref_no = generate_reference_number();

$this->Model->dealer_renew_save($account_id,$req_id,$ref_no,$app_type,$registered_year2);

$data = [
         'success'=>1,
         'message'=> 'Application Successfully Renewed.'
         ];

generate_json($data);
例如,我选择了
2018
,然后我希望它保存
2018-00-00 00:00:00

它保存
0000-00-00:00:00


有什么问题吗?

问题是你的约会对象是这个吗

$registered_year2 =". $registered_year .-00-00 00:00:00"; 
如果
$registered\u year=2019
,则您拥有
。2019-00-00:00:00
带点。你的混合串联与插值。MySQL日期时间不将其识别为有效日期

例如,我选择2018,然后我想保存它2018-00-00:00:00

可以肯定的是,
2018-00-00:00:00
不是
。2019年-00-00:00:00

这是一个简单的打字错误

进一步

2018-00-00:00:00
不是有效日期。所以那是行不通的。但让我们看看这个:

只想将年份保存在我的数据库中使用currenttimestamp类型创建的日期\u

Datetime不是时间戳。如果需要datetime字段中的年份,可以在查询的select和where部分使用
year(datetime\u字段)

如果需要时间戳,可以将时间戳转换为日期时间

   YEAR(FROM_UNIXTIME(timestamp_field))
因此,如果您保存当前日期时间(NOW()),尽管我更喜欢在PHP中这样做,因为DB有自己的时区设置,与PHP不同。那你就可以在你需要的时候这么做


干杯。

有两件事需要改变。第一,根据回答

$registered_year2 = $registered_year . "-00-00 00:00:00";
确保日期为
2018-00-00:00:00


另一件事是将您的字段类型
时间戳
更改为
日期时间

它应该是$registed\u year2=$registed\u year。"-00-00 00:00:00"; 插入前将年份传递给db时出现问题。是否尝试检查
$this->input->post('registered_year')
是否有值?为什么不将此实体的数据类型更改为
datetime()
它没有生成手动日期和时间?@DevsiOdedra它仍然保存0000-00-00,但注册年份2的值是2010-00-00:00:00。顺便说一句,我创建的日期类型是currenttimestamp。问题是您的日期是这
$registered\u year2=“.$registered\u year.-00-00:00:00”或者如果
$registered\u year=2019
则您有带点的
.2019.-00-00:00:00
。你的混合连接和插值。明白了,伙计。然后我将类型从timestamp更改为datetime。谢谢,您可以使用其中一种,时间戳或日期时间,它们在某些情况下都有优势。对于created at,我可能会使用datetime,因为它更容易阅读。。。英雄联盟