Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Damon

Executado procedure com php

Recommended Posts

Alguém sabe me falar se é correto usar o mssql_result para pegar o resultado de uma procedure ou devo

pegar outra função ?

 

$sql = "exec P_situacao'$fcnpj'";
	$res = mssql_query($sql, $db_conexao);
			 
	
	$ativo = mssql_result($res,0,"situacao_cliente");
	
	$podelogar = $ativo;
	
	
	if ($podelogar)
	{	

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

De cara, não é correto pois as funções mysql_* não devem mais ser utilizadas. Substituia por PDO ou MySQLi.

 

Entretanto, dependendo do contexto, não há porque não utilizar. Uma vez que a stored procedured deve ser executada manualmente (diferente de uma trigger) não há porque não utilizar o seu resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

De cara, não é correto pois as funções mysql_* não devem mais ser utilizadas. Substituia por PDO ou MySQLi.

 

Entretanto, dependendo do contexto, não há porque não utilizar. Uma vez que a stored procedured deve ser executada manualmente (diferente de uma trigger) não há porque não utilizar o seu resultado.

na verdade é mssql_query essa função não está depreciada, a forma que está é 1 das muitas formas de consulta logo não vejo nada de errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade é mssql_query essa função não está depreciada, a forma que está é 1 das muitas formas de consulta logo não vejo nada de errado.

Errado, todas as funções estão depreciadas. Basta uma olhada rápida no manual (em inglês, pois o manual em português está desatualizado).

 

Não encontrei uma única função mysql_* que não estivesse depreciada.

Essa recomendação vem desde a integração da PDO, e MySQLi, com o PHP , a única diferença, é que foi oficializada recentemente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Errado, todas as funções estão depreciadas. Basta uma olhada rápida no manual (em inglês, pois o manual em português está desatualizado).

 

Não encontrei uma única função mysql_* que não estivesse depreciada.

Essa recomendação vem desde a integração da PDO, e MySQLi, com o PHP , a única diferença, é que foi oficializada recentemente.

Sim amigo eu sei, mas ele está conectando ao SQL Server e não ao MySQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, falha minha. Eu ignoro qualquer uso de funções nativas, e ADOdb, para o banco de dados.

 

Como isso é, de certa forma, relevante ao tópico, responderei.

 

A recomendação segue a mesma. Tal qual as funções mysql_* foram depreciadas, e já havia os avisos da comunidade para a sua não utilização, as demais seguem com a mesma recomendação.

 

Seja mssql_*, pgsql_*, odbc_* ou qualquer outra que pode ser substituída pela PDO.

 

Também há no manual:

 

This extension is not available anymore on Windows with PHP 5.3 or later.

 

No mais, como eu já havia mencionado, não há o porque não receber o resultado pelo PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então pessoal realmente obtive o resultado executado pela procedure perfeitamente assim como eu testei no bd,

porem quando eu jogo dentro do meu if eu não sei o porque ele não esta fazendo a comparação correta, vou tentar me explicar melhor !rs

 

<?php
require("classes.php");
require("conecta.php");
	
	$fcnpj= '07.xxx.xxx/xxxx-08';
	
	$sql = "exec P_situacao'$fcnpj'";
	$res = mssql_query($sql, $db_conexao);
			 
	
	$ativo = mssql_result($res,0,"situacao_cliente");
	
	$podelogar = "$ativo";
	
	if($podelogar == "contrato"){
	echo "$podelogar";
	}
	else{
	
	echo"Nao tem suporte";
	
	}
	


?>

Eu criei esse script só para teste.

 

Esse carinha '07.xxx.xxx/xxxx-08' no meu banco ele tem contrato, então pela logica era para cair no if mais ele esta caindo no else. Vai entender !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria mais interessante retornar um boolean (true/false ou 1/0), na procedure, ao invés de retornar uma string?

Mesmo que o retorno seja uma string escrita true, ou false, você pode usar cast type.

	
if((boolean)mssql_result($res , 0 , "situacao_cliente")) {
   echo "Pode logar";//removi a variável para exemplo.
} else {
   echo "Nao tem suporte";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria mais interessante retornar um boolean (true/false ou 1/0), na procedure, ao invés de retornar uma string?

 

Mesmo que o retorno seja uma string escrita true, ou false, você pode usar cast type.

	
if((boolean)mssql_result($res , 0 , "situacao_cliente")) {
   echo "Pode logar";//removi a variável para exemplo.
} else {
   echo "Nao tem suporte";
}

Gabriel ai eu não entendi ..aonde fica a minha comparação? Ele só vai poder logar se o resultado for "contrato".

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sua comparação fica no valor retornado, como sempre.

O que estou questionando é, qual a real necessidade em retornar apenas a palavra 'contrato'.

 

Se a procedure foi criada com o intuito de verificar se o usuário possui um contrato, seu resultado pode ser apenas dois (um booleano): sim ou não (true ou false).

 

Agora, se você retorna mais informações junto com a palavra contrato, deve tratar essa informação.

 

Para ter certeza de qual é o resultado, imprima-o:

$ativo = mssql_result($res , 0 , "situacao_cliente");

var_dump($ativo);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim agora entendi o que você quis dizer, na logica ele é um booleano, as situação do cliente vai depender de seu status, ele pode

esta com "contrato","sem contrato",ou "suporte até ".

 

A procedure esta buscando este status "situacao_cliente" somente ele, como eu tinha dito antes eu já verifiquei fora do IF ele esta funcionando perfeitamente. usando o exemplo que você passou o returno é string(8) "Contrato"

ate ai blz, mas quando eu coloco uma condição para esse carinha ai ele não entra nela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A diferença é que, você está testando "contrato" e o retorno correto é "Contrato". Comparção de strings não são case insensitive.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.