Foros del Web » Programando para Internet » PHP »

control de errores

Estas en el tema de control de errores en el foro de PHP en Foros del Web. hola estoy tratando de que los errores que genera mi pagina web no muestren datos técnicos al usuario,como x ejemplo : Warning: mssql_connect() [function.mssql-connect]: message: ...
  #1 (permalink)  
Antiguo 02/09/2011, 09:58
 
Fecha de Ingreso: septiembre-2008
Mensajes: 26
Antigüedad: 15 años, 7 meses
Puntos: 0
Pregunta control de errores

hola estoy tratando de que los errores que genera mi pagina web no muestren datos técnicos al usuario,como x ejemplo :

Warning: mssql_connect() [function.mssql-connect]: message: Error de inicio de sesion del usuario 'desarrollo'. (severity 14) in C:\xampp\htdocs\digital\libs\ConexionBD.php on line 26

para lo cual mostrare lo que estoy haciendio. primero, tengo una clase llamada ConexionBD.php

<?php

class ConexionBD
{
private static $instance = null;
private $conn1;
private function __construct()
{
}
public static function getInstance()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
public function AbrirBDmptIntegrada() {
try{
if(!isset($this->conn1)){
$this->conn1=mssql_connect("WEBMUNI","desarrollo","@desa rrollo123") ;
$res = mssql_select_db("BDmptIntegrada",$this->conn1);
}
return $this->conn1;
}
catch(Exception $ex) {
// throw new $ex->getMessage();
throw new Exception ("La conexión al servidor a fallado..");
}
}

//cierra la conexion con el motor de base de datos
public function CerrarBDmptIntegrada(){
if( isset( $this->conn1 ) ){
mssql_close( $this->conn1 );
unset( $this->conn1 ); // $this->conn = null;
//unset( $this->rst ); // $this->rst = null;
}
}

}
?>


segundo, tengo una pagina prueba.php que contiene lo siguiente:

<?php
try{
include_once("../../libs/ConexionBD.php");
$objcn =ConexionBD::getInstance(); //capturar una instancia de la clase conexionBD
$cn=$objcn->AbrirBDmptIntegrada();
} catch (Exception $ex){
$mensaje = ($ex->getMessage()) ;
echo $mensaje;
}
?>

bien, en teoria cuando ocurra un error en la conexion a la BD que puede pasar por por "n" motivos, deberia saltarme al bloque "catch" e imprimir el msje : "La conexión al servidor a fallado..", sin embargo lo que me hace es imprimir algo como el error antes mencionado...ayuda please, que estoy haciendo mal?
  #2 (permalink)  
Antiguo 02/09/2011, 10:33
Avatar de hasdpk  
Fecha de Ingreso: agosto-2011
Ubicación: $spain->city( 'Arucas' );
Mensajes: 1.800
Antigüedad: 12 años, 7 meses
Puntos: 297
Respuesta: control de errores

Si lo que quieres es omitir los errores mostrados por una funciona, sólo tiene que añadirle "@" delante del la función así, por ejemplo "@mysql_connect()"

Para más información: http://es.php.net/manual/es/language.operators.errorcontrol.php
  #3 (permalink)  
Antiguo 02/09/2011, 11:04
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: control de errores

Cita:
Iniciado por hasdpk Ver Mensaje
Si lo que quieres es omitir los errores mostrados por una funciona, sólo tiene que añadirle "@" delante del la función así, por ejemplo "@mysql_connect()"

Para más información: http://es.php.net/manual/es/language...rorcontrol.php
No se recomienda el uso de @, es una mala practica (trabajar sobre los síntomas no soluciona el problema). En vez de eso puedes intentar hacerlo con try y catch.

Saludos
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #4 (permalink)  
Antiguo 02/09/2011, 12:48
 
Fecha de Ingreso: septiembre-2008
Mensajes: 26
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: control de errores

1. no quiero omitirlos si no controlarlos
2. ya estoy usando try -catch pero no tengo el resultado que espero
  #5 (permalink)  
Antiguo 02/09/2011, 13:00
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: control de errores

Código PHP:
$objcn =ConexionBD::getInstance();
if(
is_source(objcn )){
...

__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #6 (permalink)  
Antiguo 02/09/2011, 13:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: control de errores

Que tal betoja,

1) No deberías utilizar Singleton para lo conexión a la bbdd es una mala idea y hay info de sobra del porque en san google o en el foro, y en caso de seguir por ese camino deberias sobrescribir __clone para que sea realmente un Singleton.
2) El set de funciones mssql_* no maneja excepciones, deberías utilizar PDO y setearlo para que maneje excepciones http://php.net/manual/en/pdo.error-handling.php.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 02/09/2011, 13:15
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: control de errores

Cita:
Iniciado por masterpuppet Ver Mensaje
Que tal betoja,

1) No deberías utilizar Singleton para lo conexión a la bbdd es una mala idea y hay info de sobra del porque en san google o en el foro, y en caso de seguir por ese camino deberias sobrescribir __clone para que sea realmente un Singleton.
2) El set de funciones mssql_* no maneja excepciones, deberías utilizar PDO y setearlo para que maneje excepciones http://php.net/manual/en/pdo.error-handling.php.

Saludos.
Discrepo en que usar singleton en la conexión sea una mala idea. El puede requerir que solo se use una, para el sitio que hago por ejemplo, es critico que sea de este modo.
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #8 (permalink)  
Antiguo 02/09/2011, 13:33
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: control de errores

Porque Singleton es una mala idea hay info de sobra, una referencia, http://blogs.msdn.com/b/scottdensmor...25/140827.aspx, porque a ti te parece bueno ?, y con respecto al requisito que mencionas, no es excusa, ese problema se puede resolver con Registry o DI + Factory.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 02/09/2011, 14:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: control de errores

Exacto lo mejor para diseño en estos casos es DI, es lo más limpio que puedes hacer, ya que desacoplas mucho tu sistema y lo haces más modular.

Es por eso mismo que frameworks serios (como Zend) no usan Singleton en estos casos, porque realmente no tiene caso limitar tu sistema a algo así.

Etiquetas: control, errores, sql, usuarios
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 02:26.