Damon 20 Denunciar post Postado Janeiro 13, 2014 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
Gabriel Heming 766 Denunciar post Postado Janeiro 13, 2014 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
viox 1 Denunciar post Postado Janeiro 13, 2014 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
Gabriel Heming 766 Denunciar post Postado Janeiro 13, 2014 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
viox 1 Denunciar post Postado Janeiro 13, 2014 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
Gabriel Heming 766 Denunciar post Postado Janeiro 13, 2014 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
Damon 20 Denunciar post Postado Janeiro 14, 2014 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
Gabriel Heming 766 Denunciar post Postado Janeiro 14, 2014 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
Damon 20 Denunciar post Postado Janeiro 14, 2014 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
Gabriel Heming 766 Denunciar post Postado Janeiro 14, 2014 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
Damon 20 Denunciar post Postado Janeiro 14, 2014 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
Gabriel Heming 766 Denunciar post Postado Janeiro 14, 2014 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
Damon 20 Denunciar post Postado Janeiro 14, 2014 Cara tem toda razão é isso mesmo. Pensei em tudo menos nisso !!kk Valeu obrigado brother Compartilhar este post Link para o post Compartilhar em outros sites