Jump to content


Photo

Não Consigo Tratar Um Erro De Query No Mysql


  • Faça o login para participar
4 replies to this topic

#1 Ricardo.SEP

Ricardo.SEP

    Turista

  • Usuários
  • 41 posts
  • Sexo:Não informado

Posted 23/02/2008, 13:44

Olá pessoal,

Estou desenvovendo um sisteminha simples em PHP e estou tendo uma dificuldade em tratar um erro em especial.

Bom, eu tenho uma classe DAO onde efetua uma busca por ID. Assim sendo, essa busca somente pode retornar 1 registro ou nenhum caso não encontre esse registro. O problema é que eu consigo efetuar a busca quando existem registros e ocorre um erro quando tento fazer uma busca pelo registro que não existe. Para ficar mais fácil o entendimento de vocês segue os códigos.

JogoDAO.php
Essa classe é o DAO da classe jogo. Contém as instruções CRUD e também irá ter diferentes tipos de buscas. Está nessa classe busca por ID.
<?php

require("conn.php");

class jogoDAO {

	public function inserirJogo(Jogo $jogo) {
		...
	}

	public function updateJogo(Jogo $jogo, $idjogo) {
		...
	}

	public function deleteJogo($id_jogo) {
		...
	}

	public function getJogosByID($id_jogo) {
		//Abrindo conexão
		$conn = Conn::AbrirConn();

		$sql = "SELECT * FROM jogos WHERE id_jogo = $id_jogo";

		$result = mysql_query($sql, $conn);

		//Criando o objeto jogo
		while($row = mysql_fetch_array($result)) {
			$Jogo = new Jogo();
			$Jogo->setIdJogo($row["id_jogo"]);
			$Jogo->setTimeCasa($row["time_casa"]);
			$Jogo->setTimeVisitante($row["time_visitante"]);
			$Jogo->setPlacarCasa($row["placar_casa"]);
			$Jogo->setPlacarVisitante($row["placar_visitante"]);
			$Jogo->setDataHoraJogo($row["datahora_jogo"]);
			$Jogo->setNarrador($row["narrador"]);
			$Jogo->setCidade($row["cidade"]);
			$Jogo->setEstadio($row["estadio"]);
			$Jogo->setEstado($row["estado"]);
			$Jogo->setRodada($row["rodada"]);
			$Jogo->setCampeonato($row["campeonato"]);
		}

		return $Jogo;
	}
}

jogoDAO_teste.php
Nesse arquivo fica os testes que eu faço com o DAO.
<?php
/**
 * Teste consulta por ID
 */
 require("../pojo/jogo.php");
 require("../dao/jogoDAO.php");

 $JogoDAO = new JogoDAO();
 $jogo = $JogoDAO->getJogosByID(1);

 echo("ID do Jogo: " . $jogo->getIdJogo() . "<br>");
 echo("Mandante: " . $jogo->getTimeCasa() . "<br>");
 echo("Visitante: " . $jogo->getTimeVisitante() . "<br>");
 echo("Placar Casa: " . $jogo->getPlacarCasa() . "<br>");
 echo("Placar Visitante: " . $jogo->getPlacarVisitante() . "<br>");
 echo("Data Hora: " . $jogo->getDataHoraJogo() . "<br>");
 echo("Narrador: " . $jogo->getNarrador() . "<br>");
 echo("Estádio: " . $jogo->getEstadio() . "<br>");
 echo("Cidade: " . $jogo->getCidade() . "<br>");
 echo("Estado: " . $jogo->getEstado() . "<br>");
 echo("Rodada: " . $jogo->getRodada() . "<br>");
 echo("Campeonato: " . $jogo->getCampeonato() . "<br>");
/**
 * Fim dos testes de consulta
 */
?>

Explicando mais uma vez o problema. No meu teste do DAO (postado logo acima) se eu coloco o ID como 3 (em $jogo = $JogoDAO->getJogosByID(1);) e esse ID existe no banco, tudo funciona perfeito. Uma beleza, porém se eu coloco um ID que não existe no banco ocorre um erro que eu gostaria de tratar. A mensagem de erro que aparece é essa:

Fatal error: Call to a member function getIdJogo() on a non-object in C:\testes\jogoDAO_teste.php on line 92


Gostaria de tratar esse erro para exibir uma mensagem mais amigável.
A linha 92 é essa: $jogo = $JogoDAO->getJogosByID(1);

Se tiverem dúvidas com relação ao meu problema, podem perguntar.

Grato pela ajuda.

Edição feita por: Ricardo.SEP, 23/02/2008, 13:47.


#2 Marcos Aurélio

Marcos Aurélio

    Das terras geladas da Sibéria

  • Usuários
  • 208 posts
  • Sexo:Masculino

Posted 23/02/2008, 14:31

O problema é o seguinte: quando você busca por um jogo que não está cadastrado, o mysql_query retorna vazio e nem chega a setar o $Jogo->setIdJogo(), ou seja, ele tenta retornar um objeto que não existe.

Agora uma sugestão:
Porque ao invés de você tratar cada característica do jogo como um objeto, você não trata o jogo por completo como um objeto, cria um setJogo() que você passará o array com as informações, no caso o $row. Na função get, você passaria como parametro a chave do array. Algo como:

public function getJogo($key)
{
	return $this->jogos[$key];
}

Sendo que o $this->jogos seria setado no setJogo(), entendeu?

Outra coisa: o while não é necessário, já que o id é primary key, logo ele só pode retornar um registro por busca, certo?

[]s (y)

Edição feita por: Marcos Aurélio, 23/02/2008, 17:36.


#3 LarPhozyHah

LarPhozyHah

    Super Veterano

  • Usuários
  • 14515 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 14/10/2017, 13:05

Cialis Kaufen Preise Clomid 3 Comprimes Amiloride viagra Cialis 10mg Preisvergleich Diferencias Entre Cialis Y Viagra Plus Longtemps Au Lit.

#4 RonsisM

RonsisM

    Super Veterano

  • Usuários
  • 15724 posts
  • Sexo:Masculino
  • Localidade:Plovdiv

Posted 14/10/2017, 16:00

Buy 10 Pack Of Clomid Pills Buy Nitrostat Without A Prescription Cialis Y La Disfuncion Erectil generic viagra Cialis Wirkung Nicht Dapoxetina 30
Buy Celebrex No Prescription buy levitra online Should I Take Expired Amoxicillin Propecia Anticonceptivos Vente Cialis En Belgique
Clobetasol Best Website By Money Order Over Night Baclofen Riva Citalopram Comprar Cialis Online Opiniones viagra online Secure Buy Cialis Online Europ Skypharmacy How Can I Get Some Acyclovir
Zithromax Pediatric Xenical 120 Mg Prix Levitra 20 Mg 30 Tablet viagra vs cialis vs levitra reviews Direct Zentel 400mg Kamagra Helly 100mg
Clomid 100mg Posologie Tetracycline Vs Amoxicillin Addolorato Baclofene vardenafil vs viagra Where Is The Best Place To Buy Viagra?

#5 LarPhozyHah

LarPhozyHah

    Super Veterano

  • Usuários
  • 14515 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 29/10/2017, 15:21

Cialis Tiempo Duracion viagra prescription Acheter Amoxicillin Prescrire Eu Medicament Pharmacie
Diarrhea Side Effect Of Cephalexin viagra Peut Acheter Baclofene Bupropion Recreational Use Ciprocinal Tablete




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq