PHP和Oracle开发人员的结果不同

时间:2013-04-29 17:33:00

标签: php oracle plsql

我看到一个直到现在都无法解决的问题......

我的目标是开发一个包含查询PL / SQL信息的php页面。 我设法建立连接并进行读取...但是当我将PHP结果与Oracle Developer(安装在我的计算机上)的结果进行比较时,我发现它们不一样...... PHP的结果来了作为应用于它的过滤器..只出现一些。

可能是什么原因?有人可以帮帮我吗?

代码如下:

$conexao = oci_connect($user,$pass,$db);

if (!$conexao) {
    echo "falha na conexão";
}
else{
    $query = "Select assignment,problem_status
            From MV_ZON_SERVICE_REQUEST
            where assignment in   ('Desenvolvimento Aplicacional SI -  Digitalização & Arquivo',    'Desenvolvimento Aplicacional SI - NB FILENET RESP',    'Desenvolvimento Aplicacional SI - NB SAP RESP',    'Desenvolvimento Aplicacional SI - Portais de Admin Corporativa',   'Desenvolvimento Aplicacional SI - SAP',    'Suporte Aplicacional SI 2ª linha - Digitalização & Arquivo',   'Suporte Aplicacional SI 2ª linha - Portais de Admin Corporativa',   'Suporte Aplicacional SI 2ª linha - SAP',  'Suporte Aplicacional SI 2ª linha - ZON Periódicos',  'Suporte Técnico SI - Digitalização & Arquivo',  'Suporte Técnico SI - Portais de Admin Corporativa',   'Suporte Técnico SI - SAP')
            and problem_status not in ('Closed','Resolved')";

    $stmt = oci_parse($conexao,$query);
    oci_execute($stmt);

    $nrows = oci_fetch_all($stmt,$results);

    if ( $nrows > 0 ) {
       print "<TABLE ID=\"tablistagem\" BORDER=\"1\">\n";
       print "<TR>\n";
       while ( list( $key, $val ) = each( $results ) ) {
          print "<TH>$key</TH>\n";
       }
       print "</TR>\n";

       for ( $i = 0; $i < $nrows; $i++ ) {
          reset($results);
          print "<TR>\n";
          while ( $column = each($results) ) {
             $data = $column['value'];
                print "<TD>$data[$i]</TD>\n";
          }
          print "</TR>\n";
       }
       print "</TABLE>\n";
    } else {
       echo "No data found<BR>\n";
    }
    echo "";
    OCILogoff($conexao);
}

我在php中测试了查询,oracle开发人员完全一样......正如我所说,返回不同的结果:x

查询:

Select assignment,problem_status
From MV_ZON_SERVICE_REQUEST
where assignment in   ('Desenvolvimento Aplicacional SI -  Digitalização & Arquivo',    'Desenvolvimento Aplicacional SI - NB FILENET RESP',    'Desenvolvimento Aplicacional SI - NB SAP RESP',    'Desenvolvimento Aplicacional SI - Portais de Admin Corporativa',   'Desenvolvimento Aplicacional SI - SAP',    'Suporte Aplicacional SI 2ª linha - Digitalização & Arquivo',   'Suporte Aplicacional SI 2ª linha - Portais de Admin Corporativa',   'Suporte Aplicacional SI 2ª linha - SAP',  'Suporte Aplicacional SI 2ª linha - ZON Periódicos',  'Suporte Técnico SI - Digitalização & Arquivo',  'Suporte Técnico SI - Portais de Admin Corporativa',   'Suporte Técnico SI - SAP')
and problem_status not in ('Closed','Resolved')

Oracle结果:

link for image

PHP结果:

  

未找到数据

谢谢

1 个答案:

答案 0 :(得分:1)

下午好,

我设法解决了这个问题.. 我会留下我的解决方案,以解决有人可能遇到的类似问题。

经过重大审核后发现,php中的字符编码并不等于数据库,即,当php会搜索某些带有特殊字符的文本内容时,无法识别并放入不同的字符...当检查时是否存在设定名字,什么都没找到......

解决这个问题就足以在Oracle开发人员中运行以下查询来了解数据库的编码:

  select DECODE(parameter, 'NLS_CHARACTERSET', 'CHARACTER SET',
'NLS_LANGUAGE', 'LANGUAGE',
'NLS_TERRITORY', 'TERRITORY') name,
value from v$nls_parameters
WHERE parameter IN ( 'NLS_CHARACTERSET', 'NLS_LANGUAGE', 'NLS_TERRITORY')

编码足以改变PHP代码中我连接的地方:

$conexao = oci_connect($user,$pass,$db,'WE8MSWIN1252');