我无法在pdo中绑定到日期

时间:2018-04-27 02:59:49

标签: php pdo

有人知道我的问题吗?我有一个Oracle数据库,我使用了pdo。我无法获取数据,因为绑定日期列时出现问题。这是我的代码。

private function query($sql, $params = array()){
    $this->_error = false;
    if ($this->_query = $this->_pdo->prepare($sql)) {
        $x = 1;
        if (count($params)) {
            foreach ($params as $param) {
                if (DateTime::createFromFormat('Y-m-d G:i:s', $param) !== FALSE) {
                    $this->_query->bindValue($x,TO_DATE($param,'YYYY-MM-DD HH24:MI:SS')); //THE PROBLEM IS HERE.<--
                }else{
                    $this->_query->bindValue($x,$param);
                }
                    $x++;
                    }
                }
                if ($this->_query->execute()) {
                    $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
                    $this->_count = $this->_query->rowCount();
                    $this->_error = false;
        }
        else
        {
            $this->_error = true;
        }
    }
    return $this;
}

1 个答案:

答案 0 :(得分:0)

使用NLS_DATE_FORMAT(有效格式为here)设置Oracle'客户端'日期格式,然后将PHP中的日期转换为相同的格式。您只需将此字符串绑定到SQL语句,而无需使用任何特殊处理。

在您的代码中,这似乎是:

if (DateTime::createFromFormat('Y-m-d G:i:s', $param) !== FALSE) {
                    $this->_query->bindValue($x,$param);
                } 

有多种方法可以设置NLS_DATE_FORMAT。如果将其设置为环境变量,则还需要设置NLS_LANG。或者,您可以在连接后运行ALTER语句。有关设置环境的详细信息,请参阅Underground PHP & Oracle Manual的全球化章节。