Foros del Web » Programando para Internet » PHP »

Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Estas en el tema de Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago? en el foro de PHP en Foros del Web. Me gustaría controlar los errores en este código: Código PHP: //conecto con la base de datos $conn  =  mysql_connect ( "localhost" , "root" , "" ); //selecciono la BBDD mysql_select_db ( "_BBDD" ...
  #1 (permalink)  
Antiguo 29/03/2011, 05:02
 
Fecha de Ingreso: octubre-2010
Mensajes: 17
Antigüedad: 13 años, 5 meses
Puntos: 0
Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Me gustaría controlar los errores en este código:

Código PHP:
//conecto con la base de datos
$conn mysql_connect("localhost","root","");
//selecciono la BBDD
mysql_select_db("_BBDD",$conn); 

No se bien que utilizar, si una estructura try/catch u otra cosa.

Mi objetivo es que si se produce un error al acceder a la base de datos, el cliente vea una página de error propia diseñada por mi y que aparte a mi se me remita un email.

Tengo pensado controlar solo cuando abro la BBDD y no en las consultas siguientes, tampoco se si con eso valdría.

Gracias por vuestros consejos y ayudas.
  #2 (permalink)  
Antiguo 29/03/2011, 06:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Manual

Cita:
mysql_select_db
Devuelve TRUE en caso de éxito o FALSE en caso de error.
A partir de ahi tu mismo ... un if(mysql_select_db(... si cierto sigo con la web si no muestro error y mando el email...

Antes de eso tambien podrias tener un error de conexion (mysql_connect) y despues en las consultas tambien podrias tener errores (mysql_query or die) ....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 29/03/2011 a las 06:48
  #3 (permalink)  
Antiguo 29/03/2011, 07:53
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

puedes en un principio depurar tus consultas con el mysql_error(), te sirve para las funciones que estas indicando, ejemplo
Código PHP:
Ver original
  1. $connect = mysql_connect('host','user','password') or die("No se logro conectar con el servidor de Base de datoa ".mysql_error());
  2. mysql_select_db('db') or die("No se ha seleccionado la base de datos ".mysql_error());
  3. mysql_query("/*consulta*/") or die("Error al ejecutar la consulta".mysql_error());
ademas de los mensajes que estas indicando tu mismo mysql_error te indicara el error que da el mysql en si, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #4 (permalink)  
Antiguo 29/03/2011, 10:49
 
Fecha de Ingreso: octubre-2010
Mensajes: 17
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Gracias a los dos, utilizaré lo que me ha comentado quimfv para el control del error, la redirección a la página de error y el envío del mail, y tal vez el mysql_error para el contenido del mail. :D

Sólo una cosa más ... tengo pensado controlar los errores en la conexión y la selección de la base de datos, pero ... ¿Lo tengo que hacer en cada consulta posterior también? ¿O con lo primero ya vale?
  #5 (permalink)  
Antiguo 29/03/2011, 11:20
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 20 años, 11 meses
Puntos: 60
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

¿Quieres hacer algo más profesional?

Usa PDO y maneja los errores con Excepciones.

Código PHP:
<?php
try {
    
$db = new PDO("mysql:dbname=pdo;host=localhost""username""password" );
    echo 
"PDO connection object created";
    }
catch(
PDOException $e)
    {
    
//Aqui caen tus errores.
    
echo $e->getMessage();
    }
?>
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #6 (permalink)  
Antiguo 29/03/2011, 12:53
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Cita:
Iniciado por _ssx Ver Mensaje
¿Quieres hacer algo más profesional?

Usa PDO y maneja los errores con Excepciones.

Código PHP:
<?php
try {
    
$db = new PDO("mysql:dbname=pdo;host=localhost""username""password" );
    echo 
"PDO connection object created";
    }
catch(
PDOException $e)
    {
    
//Aqui caen tus errores.
    
echo $e->getMessage();
    }
?>
+1 con esta opción
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 29/03/2011, 12:54
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Cita:
Iniciado por _ssx Ver Mensaje
¿Quieres hacer algo más profesional?

Usa PDO y maneja los errores con Excepciones.

Código PHP:
<?php
try {
    
$db = new PDO("mysql:dbname=pdo;host=localhost""username""password" );
    echo 
"PDO connection object created";
    }
catch(
PDOException $e)
    {
    
//Aqui caen tus errores.
    
echo $e->getMessage();
    }
?>
Esa era!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #8 (permalink)  
Antiguo 29/03/2011, 12:56
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Impresionante el manejo de Excepciones.

Llevo matándome la cabeza tratando de entender eso y lo encuentro en un tema tan sencillo...

Va Karma y gracias por ese ejemplo.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #9 (permalink)  
Antiguo 29/03/2011, 18:08
 
Fecha de Ingreso: octubre-2010
Mensajes: 17
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Cita:
Iniciado por _ssx Ver Mensaje
¿Quieres hacer algo más profesional?

Usa PDO y maneja los errores con Excepciones.

Código PHP:
<?php
try {
    
$db = new PDO("mysql:dbname=pdo;host=localhost""username""password" );
    echo 
"PDO connection object created";
    }
catch(
PDOException $e)
    {
    
//Aqui caen tus errores.
    
echo $e->getMessage();
    }
?>
Me ha gustado el tema del PDO, lo estudiaré para próximos proyectos seguro, ¡Gracias! .

Ahora no quiero cambiarlo todo, ya que este tema era el único que me faltaba para rematar este proyecto, pero se agradecen todo tipo de mejoras hacia diseños más profesionales :D

He estado trabajando este día y al final lo voy a dejar así:

Código PHP:
//conecto con la base de datos
$conn mysql_connect("localhost","root","");
if(!
$conn){ 
     
$email "[email protected]";
     
$asunto "Holita";
     
$remitente "[email protected]";
     
$contenedor_mensaje1 'Error de acceso a la BBDD (mysql_connect) &nbsp&nbsp&nbsp' .mysql_error();
     
$headers "MIME-Version: 1.0\r\n";
     
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
     
$headers .= "From: me.es<$remitente>\r\n";
     
     
mail($email$asunto$contenedor_mensaje1$headers);  
     
     
$url="error";
     echo 
"<SCRIPT>window.location='$url';</SCRIPT>";    
}


//selecciono la BBDD
$selcon mysql_select_db("_BBDD",$conn);
if(!
$selcon){ 
     
$email "[email protected]";
     
$asunto "Holita";
     
$remitente "[email protected]";
     
$contenedor_mensaje1 'Error de acceso a la BBDD (mysql_connect) &nbsp&nbsp&nbsp' .mysql_error();
     
$headers "MIME-Version: 1.0\r\n";
     
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
     
$headers .= "From: me.es<$remitente>\r\n";
     
     
mail($email$asunto$contenedor_mensaje1$headers);  
     
     
$url="error";
     echo 
"<SCRIPT>window.location='$url';</SCRIPT>"



¿Creéis que tengo que ponerlo también en cada consulta (mysql_query)? ¿Es necesario poner el die()?

Un saludo y muchas gracias a todos por la ayuda.
  #10 (permalink)  
Antiguo 30/03/2011, 10:27
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Para tu pregunta, sí.

Saludos.
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #11 (permalink)  
Antiguo 30/03/2011, 11:00
 
Fecha de Ingreso: octubre-2010
Mensajes: 17
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Cita:
Iniciado por Carxl Ver Mensaje
Para tu pregunta, sí.

Saludos.
Hay dos preguntas. :(

¡Gracias!
  #12 (permalink)  
Antiguo 30/03/2011, 13:19
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Ok, es verdad.

1. Eso depende ti.
2. Sí.

Saludos.
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #13 (permalink)  
Antiguo 30/03/2011, 17:35
 
Fecha de Ingreso: octubre-2010
Mensajes: 17
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Manejo de excepciones/errores en acceso a MySQL. ¿Cómo lo hago?

Cita:
Iniciado por Carxl Ver Mensaje
Ok, es verdad.

1. Eso depende ti.
2. Sí.

Saludos.
Gracias. :D

Etiquetas: manejo, mysql
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 18:05.