如何在PHP中更改NLS_DATE_格式

如何在PHP中更改NLS_DATE_格式,php,oracle,pdo,Php,Oracle,Pdo,如何使用PDO从Oracle数据库更改NLS_DATE_格式。 到目前为止,我有: $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

如何使用PDO从Oracle数据库更改NLS_DATE_格式。 到目前为止,我有:

    $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“

此查询:

ALTER SESSION SET 'NLS_DATE_FORMAT' = 'DD-MM-YYYY HH24:MI:SS'
…应触发此错误:

ORA-00922:缺少或无效选项

如果无法检测到,则错误检查代码中存在问题。很可能

问题在于
NLS\u DATE\u格式
不是字符串,而是标识符:

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

在我的系统中,设置NLS_DATE_格式无效,可能是因为我使用了oracle instant client。解决我的系统问题的方法是添加另一个alter session命令:

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

当设置了NLS_DATE_格式且未设置NLS_DATE_语言,并恢复为DD-MON-RR格式时,OCI驱动程序似乎感到困惑。

使用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客户端(如SQL Developer)仔细检查Oracle连接设置

另外,首先检查Oracle客户端中设置的$oraclelanguage设置的
ALTER SESSION SET NLS\u DATE\u LANGUAGE=
是否正常工作