Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Try, Catch y PDO

Estas en el tema de Try, Catch y PDO en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola soy nuevo trabajando con la clase PDO y el try and catch. Me surgieron un par de dudas... Que tipo de errores son los ...
  #1 (permalink)  
Antiguo 18/03/2010, 10:49
 
Fecha de Ingreso: mayo-2009
Mensajes: 4
Antigüedad: 15 años, 6 meses
Puntos: 0
Try, Catch y PDO

Hola soy nuevo trabajando con la clase PDO y el try and catch. Me surgieron un par de dudas...
Que tipo de errores son los que hacen saltar a la exepcion?? porque por los visto los de codigo no y los errores en la consulta tampoco es decir si quiero insertar un caracter en un Id de una tabla que acepte solo enteros no me lo esta capturando.

Y en este caso se que esta bien usar PDOException para capturar las exepcion de esta clase, pero si quiero capturar todo tipo de exepxion uso Exception

Aca les dejo mi codigo por si estoy obviando algo o por si tiene errores, tengo una clase Padre DATAMODEL y luego las otras son extends de esa CLASE les dejo como ejemplo parte del codigo de MODELUSUARIO

CLASE DATAMODEL (PADRE de las demas)
Código:
<?php
abstract class DataModel{
	protected $SERVIDOR = "XXXX";
	protected $USUARIO = "XXXX";
	protected $CLAVE = "XXXX";
	protected $BASE = "XXXX";
	
	function conectarse(){
	    try{
			$db = new PDO("mysql:host=$this->SERVIDOR;dbname=sitio", $this->USUARIO, $this->CLAVE); 
			return $db;
			echo "todo OK";
		}catch(PDOException $e){
			echo 'todo mal';
	    }
	}
	
	function desconectar($db){
		$db=null;
		return $db;
	}
}
?>
CLASE MANEJA los USUARIOS
Código:
<?php

class ModelUsuario extends DataModel{
	
	function __construct(){
	}
	
	// //
	function guardarUsuario(Usuario $unCandidato){
		
		$db= $this->conectarse();
		try{
			$consulta = $db->prepare("INSERT INTO usuario (Nombre, Apellido) VALUES (:nombre,:apellido);");
			
			$consulta->bindParam(':nombre', $unCandidato->getNombre());
			$consulta->bindParam(':apellido', $unCandidato->getApellido());
			
			try{
				$consulta->execute();
				$consulta=null;
				echo 'todo ok';
			}catch(PDOException $e){
				echo 'Error';
			}
		}catch(PDOException $e){
			echo $e->getMessage();
			echo 'error';
		}
			
		
		$this->desconectar($db);			
	}
	
	// //
	function eliminarUsuario($unUsuarioID){
		$db=$this->conectarse();
		try{
			$consulta = $db->prepare("DELETE FROM sitio.usuarios WHERE IdUsuario =:unUsuarioID");
			$consulta->bindParam(':unUsuarioID', $unUsuarioID);
			$consulta->execute();
			$consulta=null;
			echo "todo OK";
			
		}catch(PDOException $e){
			echo $e->getMessage();
			echo "todo MAL";
			

		}
		$this->desconectar($db);
	}
	
}
?>
ACLARACION: es solo parte del codigo asi que quizas tenga algun error tonto, pero el codigo funciona.
Bueno espero que alguien me pueda guiar sobre el tema porque todo lo que leo en internet lo hacen asi o muy parecido.... pero no obtengo el resultado esperado.


Saludos y desde ya muchas gracias.

  #2 (permalink)  
Antiguo 18/03/2010, 14:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Tema movido desde PHP a PHP orientado a objetos
  #3 (permalink)  
Antiguo 19/03/2010, 06:06
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años, 5 meses
Puntos: 32
Respuesta: Try, Catch y PDO

Que tal, cómo estás?

Cita:
Que tipo de errores son los que hacen saltar a la exepcion??
Excepción, en casi cualquier idioma

Lo que veo, más allá del lenguaje, son dudas "conceptuales":

1) Los try/catch trabajan solo con excepciones, es decir, lo que tienes en el try tiene, si o si, que devolver una (y por lo general el 95% de PHP no lo hace).

2) En el catch se especifican las excepciones que quieres procesar como si fueran reglas de un firewall, es decir, primero va la más específica y finalmente una genérica para tratar de procesar algo que no sabes bien qué es y la excepción específica no contempla.

Por todo lo expuesto, lo que te estaría faltando al final es una excepción general para ver por qué se está muriendo tu código.

Código PHP:
try{

   
// codigo

}catch(PDOException $e){

   
// codigo

}catch(Exception $e){

   echo 
$e;


Siempre y cuando esté fallando y lo que falla retorne una excepción, si no lo hace, vas a tener que buscar por otro lado (en lenguajes como Java no tienes problemas porque TODO retorna una excepción).

También hay que entender que si el error es de "lógica", no hay excepción que te salve (como el echo que haces luego de un return).

Las excepciones no hacen magia, solo capturan algo que retornó una excepción, si no lo hace, no lo capturas y sigues de largo.

Espero haber aclarado tus dudas

PD: busca en el foro este tema, creo que ya hemos hablado de él y con muchos detalles técnicos.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Etiquetas: catch, pdo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:13.