Как я могу изменить NLS_DATE_FORMAT в PHP

Как я могу изменить NLS_DATE_FORMAT из базы данных Oracle, используя PDO. Пока у меня это:

$date_set = "DD-MM-YYYY HH24:MI:SS"; $query = $this->conn->prepare("ALTER SESSION SET 'NLS_DATE_FORMAT' = ?"); $query->execute(array($date_set)); 

Но когда я пытаюсь получить сеанс:

  $query = "select * from nls_session_parameters where parameter='NLS_DATE_FORMAT'"; $parameters = array(); $test = $this->fetchRow($query, $parameters); var_dump($test); exit(); 

он возвращает:

DD-MON-RR»

Related of "Как я могу изменить NLS_DATE_FORMAT в PHP"

Этот запрос:

 ALTER SESSION SET 'NLS_DATE_FORMAT' = 'DD-MM-YYYY HH24:MI:SS' 

… должен вызвать эту ошибку:

ORA-00922: отсутствует или недействительный параметр

Если вы не можете его обнаружить, в вашем коде проверки ошибок есть проблема. Скорее всего, вы не настроили PDO для исключения исключений .

Проблема в том, что NLS_DATE_FORMAT не является строкой, а идентификатором:

 ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY HH24:MI:SS'; 

В моей системе установка NLS_DATE_FORMAT не влияет, может быть, потому, что я использовал мгновенного клиента oracle. Лечение моей системы состоит в том, чтобы добавить еще одну команду изменения сеанса:

  ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY HH24:MI:SS'; ALTER SESSION SET NLS_DATE_LANGUAGE = 'AMERICAN'; 

Кажется, что драйвер OCI запутался, когда установлен NLS_DATE_FORMAT, и NLS_DATE_LANGUAGE отключен и возвращается в формат DD-MON-RR.

При использовании PHP / PDO / Oracle вы можете использовать:

 //change settings below $username='user'; $password='mypassword'; $dbname='databasename'; $hostname='localhost'; $port='1521'; $sid='XE'; //could also be ORCL $charset='WE8ISO8859P1'; //or UTF8 or whatever charset $oraclelangauge='AMERICAN'; $tns = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ".$hostname.")(PORT = ".$port.")) (CONNECT_DATA = (SID = ".$sid.")(SERVER = DEDICATED)))"; $dbDB = new PDO("oci:dbname=".$tns.";charset=".$charset, $username, $password); $result = $dbDB->query("ALTER SESSION SET NLS_DATE_LANGUAGE = '".$oraclelanguage."'"); 

Обязательно добавьте расширение php_pdo_oci и сначала проверьте свои настройки соединения с Oracle с другим клиентом Oracle, таким как SQL Developer.

Также сначала проверьте, работает ли ALTER SESSION SET NLS_DATE_LANGUAGE = <language> для установленного параметра $ oraclelanguage в клиенте Oracle.