Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola.
Estou tendo um problema de 7 cabeças
Tenho uma classe Principal, que server de base para outras classes. Essa classe Principal possui uma função que executa querys, recebendo apenas a query a ser executada e permitindo exibir a query na tela se eu quiser.
Tenho uma outra classe chamada Listagem, que tem uma função que faz a listagem para gerar os options de um select.
Quando essa função executa, eu chamo através da query todos os componentes da tabela onde empresa = 1
SELECT campo FROM tabela WHERE empresa = 1
Quando eu executo essa query e escrevo na tela o mysql_num_rows, é indicado 177. Mas quando executo essa query diretamente na linha de comando de sql, eu tenho 200 linhas de retorno.
Ja vi e revi os script umas dez vezes, verifiquei a query, procurei por erros no script e até outros programadores me ajudaram mas ninguém conseguiu explicar porque quando eu executo a query pelo php, algumas linhas somem do conjunto de resultados
Será que alguém poderia me dar uma idéia?
Obrigado desde já.
Obrigado pela atenção William :joia:
aí vai o código (as partes que interessam)
<?php
class Principal {
//propriedades...
public $conexao; //conexao ao banco de dados(definida no __construct)
//métodos...
public function query($query,$MostrarQuery = false){
if($MostrarQuery){
echo "\r\n<br /><br />\r\n",$query,"\r\n<br /><br />\r\n";
}
return mssql_query($query,$this->conexao);
}
}
class Listagem extends Principal {
private function ListaSelect($Tipo){
$retorno = array();
if($Tipo == 'Cobradores'){
//codigo
} elseif($Tipo == 'Situacoes'){
//codigo
} elseif($Tipo == 'Lojas'){
$res = $this->query('SELECT campo1, campo2, campo3 FROM tabela WHERE empresa = '.$this->EmpCod.' ORDER BY campo1 ASC',true);
while($este = mssql_fetch_assoc($res)){
$retorno[$este['LojCod']] = $este;
}
echo mssql_num_rows($res);//esta me retornando 177 linhas, mas se eu executar a query diretamente pelo banco de dados, retorna 200 linhas
}
return $retorno;
}
public function ListarLojas($FirstOption = 'Todas'){
$res = $this->ListaSelect('Lojas');
$lista = '
<select name="Loja" id="Loja" style="width:309px">
<option value="'.$FirstOption.'" selected="selected">
'.$FirstOption.'
</option>';
foreach($res as $este){
$lista .= '
<option value="'.$este['LojCod'].'">
'.$este['LojCod'].' - '.$este['LojRazao'].'
</option>';
}
$lista .= '</select>';
return $lista;
}
}
$Listagem = new Listagem;
$Loja = $Listagem->ListarLojas(); // variável que gera o select
?>
<!-- select que possui o resultado da função (a função gera o select)-->
<label class="alinhado" for="Loja">Loja</label>
<?php echo $Loja; ?><br />Onde você define essa propriedade ?
$this->EmpCod
$this->EmpCod é definida no construct da classe Principal. Essa variável pega um valor de $_SESSION. É um inteiro. Equivale ao código da empresa (login). Testei com vários numeros (logins) diferentes, mas deu na mesma.
<?php
class Principal {
//propriedades...
public $conexao; //conexao ao banco de dados(definida no __construct)
public $EmpCod;
function __construct($conexaoBD){
$this->EmpCod = $_SESSION['empresa'];
$this->conexao = $conexaoBD;
}
//métodos...
public function query($query,$MostrarQuery = false){
if($MostrarQuery){
echo "\r\n<br /><br />\r\n",$query,"\r\n<br /><br />\r\n";
}
return mssql_query($query,$this->conexao);
}
}
class Listagem extends Principal {
private function ListaSelect($Tipo){
$retorno = array();
if($Tipo == 'Cobradores'){
//codigo
} elseif($Tipo == 'Situacoes'){
//codigo
} elseif($Tipo == 'Lojas'){
$res = $this->query('SELECT campo1, campo2, campo3 FROM tabela WHERE empresa = '.$this->EmpCod.' ORDER BY campo1 ASC',true);
while($este = mssql_fetch_assoc($res)){
$retorno[$este['LojCod']] = $este;
}
echo mssql_num_rows($res);//esta me retornando 177 linhas, mas se eu executar a query diretamente pelo banco de dados, retorna 200 linhas
}
return $retorno;
}
public function ListarLojas($FirstOption = 'Todas'){
$res = $this->ListaSelect('Lojas');
$lista = '
<select name="Loja" id="Loja" style="width:309px">
<option value="'.$FirstOption.'" selected="selected">
'.$FirstOption.'
</option>';
foreach($res as $este){
$lista .= '
<option value="'.$este['LojCod'].'">
'.$este['LojCod'].' - '.$este['LojRazao'].'
</option>';
}
$lista .= '</select>';
return $lista;
}
}
$Listagem = new Listagem;
$Loja = $Listagem->ListarLojas(); // variável que gera o select
?>
<!-- select que possui o resultado da função (a função gera o select)-->
<label class="alinhado" for="Loja">Loja</label>
<?php echo $Loja; ?><br />Então é porque não está gravando a session, ou você não iniciou a session para recuperar os valores.
O pior é que o sistema nem deixa acessar a página que executa o script se a $_SESSION não estiver sendo gravada ou se não estiver sendo passada da forma correta...
Então não é a $_SESSION :(
De qualquer forma, obrigado pela atenção
isole as rotinas, e poste aqui os trechos que estão fazendo isso.
o erro pode estar no teu script, mas será necessário debugar.