我在配置我的服务器环境时遇到问题,带有PDO的PHP没有像localhost那样格式化日期。 为了测试它,我创建了两个连接(使用带有oci和mysql的pdo)。 在localhost上,oci和mysql正常运行,但在服务器上只有mysql保持正确的格式。
重要细节:在sqldeveloper上,它以与localhost pdo / oci相同的格式显示数据。
我的本地主机是WINDOWS 7而我的服务器是LINUX DEBIAN X64。
服务器上的pdo / oci可能会发生什么?
代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sem título</title>
</head>
<body>
<?php
try
{
$params->host = "172.0.0.0:1521";
$params->dbname = "geo";
$params->user = "root";
$params->pass = "";
$conn = new PDO("oci:dbname=//$params->host/$params->dbname;charset=UTF8", "$params->user", "$params->pass");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("select * from tb_geooficio where tipo = 1 and cadastro_im = 37693500 ");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>
<?php
try
{
$host = "200.0.0.1";
$user = "postmaster";
$pass = "^PostM@ster^";
$db = "bd_controleinternet";
$conn = new PDO("mysql:host=$host; dbname=$db", "$user", "$pass");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("select * from tbl_secretaria where sec_id = 7");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>
</body>
</html>
结果:
答案 0 :(得分:1)
在Oracle中,您可以使用以下命令更改用于日期转换的默认格式以匹配MySQL默认值:
ALTER SESSION SET NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
这将使Oracle日期输出像MySQL日期一样。
您可以在每次与PDO的连接时实现这一点:
$driver_options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'ALTER SESSION...' );
try {
$dbh = new PDO($dsn, $user, $pw, $driver_options);
}
catch (PDOException $e) {
// Handle exception
}
Oracle和MySQL都具有显式格式化日期的功能,您可以在查询选择列表中的表达式中调用它们。但是在Oracle中,函数是TO_CHAR(),在MySQL中函数是DATE_FORMAT(),这使得编写与RDBMS无关的代码变得更加困难。
重新评论:
似乎可以在initORCL.ora
中全局设置NLS_DATE_FORMAT,它可以通过LOGON触发器设置,可以在会话级别设置等等。这可以解释两种不同环境中的不同行为。这是一篇有趣的帖子:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:351017764854