如何在PHP中更改NLS_DATE_格式
如何使用PDO从Oracle数据库更改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
$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=
是否正常工作