Я не могу привязать к дате в pdo - PullRequest
0 голосов
/ 27 апреля 2018

Кто-нибудь знал мою проблему? У меня есть база данных 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 голосов
/ 02 мая 2018

Установите формат даты вашего клиента Oracle с помощью NLS_DATE_FORMAT (допустимые форматы здесь ), а затем преобразуйте дату в 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...