例如,我使用它在表格中插入:
INSERT INTO `mytable` (`name`, `type`, `date`) VALUES ('Smit', 12, now());
然后我需要从这个表中获取所有或一些行:
$st = $db->prepare("SELECT * FROM `mytable` WHERE id=:id");
$st->bindParam(':id', $id, PDO::PARAM_INT);
$st->execute();
$result = $st->fetchAll(PDO::FETCH_ASSOC);
我收到$result[0]['date']
字符串= "2016-09-10 21:00:00"
的位置。也许PDO有一些PDO::PARAM_
可以将所有日期字段设置为时间戳?
P.S。是的我知道我可以在这里使用的php strtotime()
,但在这种情况下我们会进行双重转换。我的意思是,如果我理解这一点,MySQL将日期时间保存为unix时间戳,当我们将其作为字符串获取时,再将其转换为时间戳,这不是一个好的解决方案。
答案 0 :(得分:1)
也许PDO有一些PDO :: PARAM_可以将所有日期字段设置为时间戳?
不,它没有。
在PHP,PDO或Mysql中都没有设置会告诉mysql将所有日期作为时间戳返回。
如果我理解正确,MySQL将日期时间保存为unix时间戳
不,你明白错了。
当我们把它作为字符串,然后在时间戳中再次转换时,它不是一个好的解决方案。
不要担心。只需以您需要的格式选择数据即可。就这么简单。
不要优化可行的东西。不要解决不存在的问题。
答案 1 :(得分:1)
MySQL不会将DATETIME存储为UNIX时间戳。
MySQL的TIMESTAMP数据类型可以像UNIX样式的时间戳一样在内部存储,但是尽管如此,默认输出的格式如YYYY-MM-DD HH:MM:SS。你将不得不将其转换回来。
您可以使用SQL函数将MySQL日期时间格式化为UNIX时间戳:
$st = $db->prepare("SELECT UNIX_TIMESTAMP(date) FROM `mytable` WHERE id=:id");
$st->bindParam(':id', $id, PDO::PARAM_INT);
$st->execute([$id]);
$result = $st->fetchAll(PDO::FETCH_ASSOC);
值得您花时间查看该页面上的其他功能。你可以在SQL表达式中做很多事情。
答案 2 :(得分:0)
P.S。是的我知道php strtotime(),我可以在这里使用,但在 这种情况我们做双转换。我的意思是,如果我正确理解, MySQL将日期时间保存为unix时间戳,当我们将其作为字符串时, 然后再按时间戳转换,这不是一个好的解决方案。
因此,如果您想避免任何转换(手动或引擎盖下),您应该在数据库中将您的字段类型设置为using (SqlConnection connection = new SqlConnection("<some connection string"))
{
connection.Open();
using (SqlCommand command = new SqlCommand("StoredProcName", connection))
{
command.CommandType = CommandType.StoredProcedure;
using (SqlTransaction transaction = connection.BeginTransaction())
{
command.Transaction = transaction;
command.ExecuteNonQuery();
transaction.Commit();
}
}
}