Ir para conteúdo
Fórum Script Brasil
  • 0

poo e mysqli com stored procedure


lucasmichel2003

Pergunta

tenho esta tabela:

CREATE TABLE IF NOT EXISTS `usuario` (

`idusuario` INT NOT NULL AUTO_INCREMENT ,

`login` VARCHAR(45) NOT NULL ,

`senha` VARCHAR(45) NOT NULL ,

PRIMARY KEY (`idusuario`) )

ENGINE = InnoDB;

e tenho esta stored procedure

CREATE PROCEDURE `mbc`.`UsuarioLogin`

(

in

login_entrada varchar(45),

senha_entrada varchar(45),

out

msg varchar(150),

retorno int,

idusuario int

)

BEGIN

declare idusuario_interno int;

declare senha_interno varchar(45);

declare login_interno varchar(47);

set login_interno = concat('"',login_entrada,'"');

select idusuario, senha

into idusuario_interno, senha_interno

from usuario where login = login_entrada;

if(senha_interno is null) then

begin

set msg = 'Usuário inexistente';

set retorno = 1;

end;

else

begin

if(senha_interno <> senha_entrada) then

begin

set msg = 'Senha de usuario inválida';

set retorno = 2;

end;

else

begin

set msg = '';

set retorno = 3;

end;

end if;

end;

end if;

END//

no php tenho duas classes uma de conexao que extends de mysqli e outra de usuario que seguem abaixo

<?php

// Constantes paea conexão com o banco de dados:

define ("DB_SERVIDOR", "localhost");

define ("DB_USUARIO", "root");

define ("DB_SENHA", "");

define ("DB_NOME", "mbc");

define ("LOGS_PATH", "/");

class conexao extends mysqli

{

public function __construct()

{

try

{

//@mysqli_connect (DB_SERVIDOR, DB_USUARIO, DB_SENHA, DB_NOME);

parent::__construct (DB_SERVIDOR, DB_USUARIO, DB_SENHA, DB_NOME);

if (mysqli_connect_errno() != 0)

throw new Exception (mysqli_connect_errno() . " - " . mysqli_connect_error());

}

catch (Exception $db_error)

{

$mensagem = $db_error->getMessage();

$arquivo = $db_error->getFile();

$data = date ("Y-m-d H:i:s");

$ip_visitante = $_SERVER['REMOTE_ADDR'];

if (!file_exists (LOGS_PATH))

mkdir (LOGS_PATH);

// mensagem que será salva no arquivo de logs do banco de dados

$log = $data . " | " . $mensagem . " | " . $arquivo . " | " . $ip_visitante . "\r\n\r\n";

error_log ($log, 3, LOGS_PATH . "db_errors.log");

echo "Erro ao conectar ao banco de dados MySQL. O erro foi reportado e o administrador do sistema tomará as devidas providências.";

exit;

}

}

public function __destruct()

{

if (mysqli_connect_errno() == 0)

$this->close();

}

}

?>

<?

//caminho para a classe

require_once 'conexao.class.php';

class usuario{

public $idusuario;

public $usuario;

function __construct($usuario,$senha)

{

$nova_conexao = new conexao();

$ret = $this->validaCodigo($usuario, $senha, $nova_conexao);

}

function validaCodigo($usuario, $senha, $conexao) {

$sql = "CALL UsuarioLogin('$usuario', '$senha', @msg, @retorno, @idusuario);";

$sql .= "SELECT @msg, @retorno, @idusuario;";

echo $sql;

$rsValidacao = $this->query($sql, $conexao);

return $rsValidacao;

}

function query($sql, $conn)

{

if($conn->multi_query($sql))

{

do

{

if ($resultado = $conn->store_result())

{

/*printf("Server version: %d\n", $conn->server_version);

printf("Server version: %d\n", $conn->affected_rows);

printf("Server version: %d\n", $conn->stat());*/

while ($row = $conn->fetch_row())

{

$retorno = $row[0];

}

$conn->free();

}

}

while ($conn->next_result());

return $retorno;

//mysqli_close($conn);

}

else

{

echo "<p>Não foi possível executar a seguinte instrução

SQL:</p><p><strong>$sql</strong></p>\n".

"<p>Erro MySQL: ".$conn->error."</p>";

exit();

$conn->close();

}

}

}

?>

quando executo:

require 'Model/usuario.class.php';

$usuario="lucas";

$senha="lucas";

$usuario = new usuario($usuario,$senha);

retorna este erro

Call to undefined method conexao::fetch_row()

só que se por exemplo eu executar $conexao->num_rows funciona, alguém poderia saber onde estou errando?

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...