如何从MySQL数据库获取时间戳?

时间:2019-05-03 12:29:29

标签: php mysql

如果我调用函数getDate_created();,我的查询将不会显示时间戳。我怎样才能解决这个问题?函数getAll()确实有效。

<?php

class Post
{
    public $date_created;


    public function getDate_created()
    {
        return $this->date_created;
    }

    public function setDate_created($date_created)
    {
        $this->date_created = $date_created;

        return $this;
    }

    public static function getAll()
    {
        $conn = Db::getInstance();
        $result = $conn->query('SELECT * FROM images');

        return $result->fetchAll(PDO::FETCH_CLASS, __CLASS__);
     }
 }


$posts = Post::getAll();

$timepost = new Post();
$t = $timepost->getDate_created();
var_dump($t);

表格图片:

CREATE TABLE `images` (
   `id` int(11) NOT NULL,
   `user_id` int(11) NOT NULL,
   `img_description` varchar(255) NOT NULL,
   `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `file_path` varchar(255) NOT NULL
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Var_dump($ t)结果显示为NULL。

2 个答案:

答案 0 :(得分:0)

您执行Post时正在创建$timepost = new Post();的新实例

如果您想从数据库中读取其中一个帖子,则应该从getAll()方法中读取一个或多个。

例如:

$posts = Post::getAll();

foreach($posts as $post) {
    var_dump($post->getDate_created());
}

//or

var_dump($posts[0]->getDate_created());

答案 1 :(得分:0)

在这种情况下,没有必要为属性设置时间戳值,因为您将获取所有记录,因此它将获取最后一个记录的值(它将覆盖之前的每个记录)。仅当您要从数据库中获取一个记录时,才有意义将值设置为$ this-> date_created属性。 通常,您只需要使某事类似:

$received_data = $result->fetch(PDO::FETCH_ASSOC);
$this->date_created = $received_data['date_created'];

此解决方案仅适用于assoc数组中的单个记录。如果您真的想为所有记录创建它,只需使用简单的foreach()循环遍历从查询中接收到的数据即可。

如果您需要数据库中的所有记录,则不想(信任我)将其设置为属性(除非您希望拥有对象数组,但是您需要重建大量当前代码,并且效率不高)。

在您的情况下,我建议仅使用返回的数组而不将值设置为属性。

此外,在这种情况下,我不建议使用getter和setter方法,只需使用$ timepost-> created_date(当然,您需要在此属性之前设置值)即可达到相同的效果。