MySQL PDO SELECT - 将所有日期作为unix时间戳返回

时间:2016-09-25 17:29:53

标签: php mysql datetime unix pdo

例如,我使用它在表格中插入:

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时间戳,当我们将其作为字符串获取时,再将其转换为时间戳,这不是一个好的解决方案。

3 个答案:

答案 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);

请参阅code screenshot

值得您花时间查看该页面上的其他功能。你可以在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(); } } }

https://dev.mysql.com/doc/refman/5.5/en/datetime.html