douyuan9512 2013-04-29 17:32
浏览 26
已采纳

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

I'm seeing a problem that until now could not solve ...

I aim to develop a php page that contains information from a query PL / SQL. I managed to make the connection and do the reading ... however when I compare the results coming from the results of the PHP with Oracle Developer (installed on my computer) I see that are not the same ... The results of PHP come as a filter applied to it .. appear only a few.

What reason can be? Someone can help me?

The code is as follows:

$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\">
";
       print "<TR>
";
       while ( list( $key, $val ) = each( $results ) ) {
          print "<TH>$key</TH>
";
       }
       print "</TR>
";

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

I tested the query in php and oracle developer was exactly the same ... as I said, return different results: x

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')

Oracle result:

link for image

PHP result:

No data found

Thank you

  • 写回答

1条回答 默认 最新

  • douxia1988 2013-05-02 13:38
    关注

    Good afternoon,

    I managed to solve the problem though .. I'll leave here my solution for future similar problems that someone may have.

    Well after a major review found that in php character encoding was not equal to the database, ie, when the php would seek some textual content with special characters could not recognize and put different characters ... when checked if there was a set given name, found nothing ...

    to solve this was enough to run the following query in Oracle developer to know the encoding of the database:

      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')
    

    Having coding was enough to change the line in the PHP code where do I connect:

    $conexao = oci_connect($user,$pass,$db,'WE8MSWIN1252');
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题