如何更改NOW()时区

时间:2012-02-06 19:23:04

标签: php mysql timezone prepared-statement

我在sql查询中使用NOW()。我想把它改成另一个时区。那可能吗?

试过这个功能

class common {

    public function getTime() {
        $date = new DateTime();
        $date->setTimezone(new DateTimeZone('Europe/Paris'));
        return $date->format('Y-m-d H:i:s');
    }

}

收到以下错误

Catchable fatal error:  Object of class common could not be converted to string in line below

        $stmt = $this->db->prepare("INSERT INTO `items` 
      (`refno`, `color`, `size`, `qt`, `stackno`, `notes`, `price`, `add_date`)
      VALUES (?, ?, ?, ?, ?, ?, ?, $this->common->getTime())") or die($db->error);

我做错了什么?

2 个答案:

答案 0 :(得分:3)

错误实际上是PHP错误,而不是SQL错误。试图在字符串插值中评估复杂的变量扩展表达式并不像你那样工作。

尝试将对象放在{}括号内:

$stmt = $this->db->prepare("INSERT INTO `items` 
      (`refno`, `color`, `size`, `qt`, `stackno`, `notes`, `price`, `add_date`)
      VALUES (?, ?, ?, ?, ?, ?, ?, {$this->common->getTime()})") or die($db->error);

请参阅手册页http://php.net/manual/en/language.types.string.php

中的小标题复杂(卷曲)语法

重新评论:

  

现在在同一行上出现此错误:尝试获取非对象的属性

您尚未显示如何设置$this->common。根据您显示的语法,常见的需要是您的类common的对象实例。我猜你试图在不实例化类的情况下调用getTime()函数。如果你想使用类的静态方法,你必须这样做:

class common {

    public static function getTime() {
        $date = new DateTime();
        $date->setTimezone(new DateTimeZone('Europe/Paris'));
        return $date->format('Y-m-d H:i:s');
    }

}

$stmt = $this->db->prepare("INSERT INTO `items` 
      (`refno`, `color`, `size`, `qt`, `stackno`, `notes`, `price`, `add_date`)
      VALUES (?, ?, ?, ?, ?, ?, ?, " . common::getTime() . ")") or die($db->error);

如果您不熟悉类和对象之间的区别以及static的用法,那么您需要进行一些阅读,例如: Object-Oriented PHP

答案 1 :(得分:0)

您将使用此SQL调用。

SET time_zone = timezone;

根据mysql文档。

http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html