【问题标题】:codeigniter only returning year of mysql datetime fieldcodeigniter 仅返回 mysql 日期时间字段的年份
【发布时间】:2013-11-07 21:01:59
【问题描述】:

我正在尝试使用 codeigniter 对一些 mysql 数据进行简单的SELECT

//setup query
$this->db->select('personId, birthday')
    ->from('person')
    ->where('personId', $personId)
    ->limit(1);

    //execute query
    $query = $this->db->get();

    //fetch result
    $result = $query->row_array();

        //found person
        if(!empty($result)){
            echo $result['birthday'];
        }
    }
}

birthday 字段在 mySQL 中作为 DATE 类型。 DB 中和 phpMyAdmin 中看到的值是 '1980-05-21',但上面代码中回显的值只是 '1980',只是年份。

我尝试将 mysql 类型切换为 DATETIME,但没有任何效果。

我的猜测是它与 Codeigniter 有关,甚至可能与结果中的“-”字符有关。这个问题快把我逼疯了!有人遇到过这个问题,知道如何解决吗?

【问题讨论】:

  • 几乎不好意思承认答案。我对我的生产数据库而不是我的开发数据库进行了类型更改。哎呀。感谢所有的建议。有时只需要其他人的一些意见来发现你的愚蠢错误。

标签: php mysql codeigniter datetime


【解决方案1】:

我复制了您的代码,一切正常,可能是您的 php.ini 中的某些内容。如果您有国际扩展名,请设置 date.timezone 并检查区域设置。 出于测试目的,在 echo $result 之后尝试 die() ......也许它之后发生了一些事情。 我用 CodeIgniter 2.1.3 版本测试你的代码。

【讨论】:

    【解决方案2】:

    这不是您问题的直接答案,因为我不确定您对date 的问题,但您似乎可以选择更改该字段,因为您已经更改过一次(如您的问题中所述)所以,在我看来,使用timestampdate/datetime 更好,这里有一个nice answer 关于它,所以,我认为如果你将类型更改为timestamp 它可能会解决问题并且很容易处理对timestamp 进行任何类型的操作,此外,CodeIgniter 有一个Date Helper 可以轻松处理日期,但这只是一个选项,您也可以使用PHP 的内置函数。

    这只是一个意见,我更喜欢timestamp 而不是date/datetime,至少,我不需要在yyyy-mm-dddd-mm-yyyy 之间交换顺序,而是可以使用类似@ 的东西来创建它987654334@ 来自timestamp

    【讨论】:

    • 我实际上已经阅读了那篇文章,以及更多关于时间戳与日期时间的最佳用途。我实际上是从将日期存储为 BIGINT 的一种非常古老的做法进行更新,所以这对我来说都是一种改进。我倾向于使用时间戳来获取更多元数据,否则使用日期时间。我坚持使用date 这个(除非我找不到解决方案),但感谢您的建议。 PHP 的新 DateTime 类也很棒,仅供参考
    猜你喜欢
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多