Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde,
Ando com um problema que até agora não consegui resolver...
Tenho como objectivo desenvolver uma página php que contenha informação proveniente de uma querie PL/SQL.
Consegui fazer a conexão e fazer a leitura... no entanto quando fui comparar os resultados vindos do PHP com os resultados do Oracle Developer (instalado no meu computador) verifico que não são os mesmos... Os resultados do PHP vêm como que com um filtro aplicado.. só aparecem alguns.
Que razão poderá ser? Alguém me pode ajudar?
o codigo é o seguinte:
$conexao = oci_connect($user,$pass,$db);
if (!$conexao) {
echo "falha na conexão";
}
else{
$query = "......";
$stmt = oci_parse($conexao,$query);
oci_execute($stmt);
$nrows = oci_fetch_all($stmt,$results);
if($nrows>> 0 ) {
....
}
else
...
A query que testei no php e no oracle developer foi exactamente a mesma... como disse, retornam resultados diferentes :x
Obrigado
>
tem certeza q é >>
if($nrows>> 0 ) {
http://php.net/manual/en/language.operators.bitwise.php
não será por certo >> uma vez que pretendo com a condição verificar se existem linhas de resultado da query, isto é, se a query retornar algum resultado o $nrows vai ter um valor superior a zero.
Quando colei o código aqui por alguma razão foi colocado alguns caracteres dsc.
o código que deveria estar era:
>
$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);
//print($nrows);
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);
}
A query executada é igual no oracle developer e no php .
Resultado do Oracle:
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.stack.imgur.com/HNd7i.png&key=10d658224341ac0bdc6cedf29ecf1aff3222a2242f253df0623b924f9ee3d1c0" alt="HNd7i.png" />
Resultado PHP:
No data found
Boa tarde,
Consegui resolver o problema entretanto..
Vou deixar aqui a minha solução para futuros problemas parecidos que alguém possa ter.
Ora bem depois de uma grande analise verifiquei que no php a codificação dos caracteres não estava igual à da base de dados, ou seja, quando o php ia buscar algum conteudo textual com caracteres especiais não conseguia reconhecer e colocava caracteres diferentes... daí quando verificava se determinado nome estava num conjunto, não encontrava nada...
para solucionar isto bastou executar a seguinte query no Oracle developer para saber a codificação da base de dados:
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')
Tendo a codificação bastou alterar no código PHP a linha em que faço o connect:
$conexao = oci_connect($user,$pass,$db,'WE8MSWIN1252');
tem certeza q é >>
if($nrows>> 0 ) {
http://php.net/manual/en/language.operators.bitwise.php