lucasmichel2003 Postado Novembro 11, 2009 Denunciar Share Postado Novembro 11, 2009 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 procedureCREATE PROCEDURE `mbc`.`UsuarioLogin`(inlogin_entrada varchar(45),senha_entrada varchar(45),outmsg varchar(150),retorno int,idusuario int)BEGINdeclare idusuario_interno int;declare senha_interno varchar(45);declare login_interno varchar(47);set login_interno = concat('"',login_entrada,'"');select idusuario, senhainto idusuario_interno, senha_internofrom usuario where login = login_entrada;if(senha_interno is null) thenbeginset msg = 'Usuário inexistente';set retorno = 1;end;elsebeginif(senha_interno <> senha_entrada) thenbeginset msg = 'Senha de usuario inválida';set retorno = 2;end;elsebeginset 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 classerequire_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çãoSQL:</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 erroCall to undefined method conexao::fetch_row()só que se por exemplo eu executar $conexao->num_rows funciona, alguém poderia saber onde estou errando? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 lucasmichel2003 Postado Novembro 12, 2009 Autor Denunciar Share Postado Novembro 12, 2009 e ai pessoal ninguém pode me ajudar? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
lucasmichel2003
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.