PDA

Ver la Versión Completa : Algo parecido al try...except


__cadetill
15-04-2004, 16:41:52
Hola compas

Tengo un script de conexión a una base de datos mySQL.


$Servidor = "localhost";
$Usuario = "userName";
$Clave = "pass";
$idcon = mysql_pconnect($Servidor, $Usuario, $Clave);


Bueno, esto es fácil. Ahora lo que me gustaría es que, si se produce un error en la conexión, me mostrara un página diferente a la que se intenta cargar. He probado esto


$idcon = mysql_pconnect($Servidor, $Usuario, $Clave);
if ($idcon == 0)
{
header('location: mipagina.php');
}


Por supuesto, en la página donde se llama al script de conexión, éste es lo primero que se ejecuta (antes de cualquier etiqueta HTML). El problema está en que, la instrcción mysql_pconnect ya escribe el error en el navegador por lo que la llamada a header no funciona.

Entonces, hay alguna manera de poder realizar esta llamada? Es decir, hay alguna manera de evitar que el error de la conexión devuelva el string de error?

PD: también me miré la instrucción die, pero por lo que he leido, sólo sirve para poder mostrar un string (y el error sigue apareciendo)

Gracias ;)

jachguate
15-04-2004, 17:38:29
El problema está en que, la instrcción mysql_pconnect ya escribe el error en el navegador por lo que la llamada a header no funciona.


Hola Cadetill

Estas seguro que mysql_pconnect escribe el error??? no puedo probarlo ahora, pero estoy seguro (y la documentación (http://www.php.net/manual/es/function.mysql-pconnect.php) me ampara ) que mysql_pconnect se limita a devolver false si no ha podido establecer la conexión (sin escribir directamente el error)...

Hasta luego.

;)

roman
15-04-2004, 17:48:58
La función error_reporting de PHP te permite establecer el nivel de errores que han de reportarse. Quizá ajustando esto evites que se escriba el mensaje de mysql_pconnect. Pero lo más recomedable es que antepongas una arroba a la función:


@mysql_pconnect(...)


que evita el mensaje para dicha llamada en particular.

// Saludos

__cadetill
15-04-2004, 18:00:42
Hola de nuevo, y gracias por las respuestas

Bueno, no se si mysql_pconnect es quien escribe en el navegador, pero el error te aseguro que sí sale ;)

Por otra parte, he probado lo comentado por Román y me ha funcionado perfectamente, header hace el redireccionamiento apropiado :)

Pos lo dicho, gracias

kinobi
15-04-2004, 18:15:21
Hola,

además de lo que se ha comentado, recordar que en la (nueva) versión 5, existe ya soporte para la gestión de excepciones:


// bloques try .. catch:
try {
...
}
catch (<excepción>) {
<manejardor_excepción>
}
...

// lanzar excepciones:
throw <excepción>;


Más información: http://www.php.net/zend-engine-2.php

Saludos.

roman
15-04-2004, 18:21:49
además de lo que se ha comentado, recordar que en la (nueva) versión 5

¿Ya has probado esta versión? Me gustaría conocer tu opinión de ella

// Saludos

kinobi
15-04-2004, 20:23:58
¿Ya has probado esta versión? Me gustaría conocer tu opinión de ella

no, todavía no, pero estoy preparando una máquina para probarla, junto con el Apache 2

Saludos

jachguate
15-04-2004, 21:47:16
@mysql_pconnect(...)que evita el mensaje para dicha llamada en particular.

Esta si no me la sabía... por mas que veo el manual on-line, no le hallo... podes explicar que hace la arroba, o bien donde puede encontrarse mas información al respecto...

Mil gracias. ;)

roman
15-04-2004, 22:46:37
o bien donde puede encontrarse mas información al respecto...

¡Vaya! Me costó trabajo encontrarlo pero ya está. Una vez hecho suena lógico: @ es un operador así que hay que buscarlo en el apartado de operadores del manual:

http://www.php.net/manual/es/language.operators.errorcontrol.php

// Saludos

jachguate
15-04-2004, 23:11:32
muchas gracias román. Yo me vi la sección de operadores... pero no cai en la cuenta de donde encontrarlo. :eek: Hasta luego. ;)

barman
16-04-2004, 14:50:34
Quizas llega un poco tarde, pero en Firebir lo tengo asi y esta controlado

$idbase = ibase_connect ( "$host", "$username","$password" ) ;
if ( $idbase == false)
{
errrooooorrr
}

Mick
26-04-2004, 23:46:59
Si te salen los errores por pantalla, tienes el php en modo debuging, lo
que esta totalmente desaconsejado para entornos de produccion, ya que es una brecha de seguridad en el servidor web.
Tienes que editar el archivo php.ini
y comentar o eliminar una linea que pondra algo parecido a esto:

error_reporting = E_ALL

Saludos
Miguel

__cadetill
26-04-2004, 23:58:33
Pues gracias a todos por las repuestas

Referente a lo que comenta Mick.... la verdad es que para desarrollo siempre trabajo en local (y esa solución no me sirve porque sino no veo los errores y no se porque falla) y la configuración del servidor... ya se lo dejo a Emilio :D

Isaac
27-04-2004, 18:34:00
¿Qué diferencia hay entre "mysql_connect" y "mysql_pconnect"?

__cadetill
27-04-2004, 18:52:18
Mira esta página (http://www.php.net/manual/es/function.mysql-pconnect.php)

Muy recomendable este manual on line sobre PHP ;)

jachguate
27-04-2004, 18:57:06
Hola Isaac. Te recomiendo crear un nuevo hilo para una nueva pregunta, que nada tiene que ver con el hilo actual. Una vez mas, la lectura de la guia de estilo de los foros, que un usuario con 71 mensajes, ya debe haber leido mas de una vez..

Hasta luego.

;)

Isaac
27-04-2004, 19:05:37
Sí, perdón, pero como vi que hablaban del comando ese, pues aproveché :p

Emilio
09-05-2004, 23:18:40
La solución que te han dado es la mejor sin lugar a dudas, no obstante cuando tenemos ya salida html y queremos redirigir a otra página, lo único que nos queda es echar mano de JavaScript.


$idcon = mysql_pconnect($Servidor, $Usuario, $Clave);
if ($idcon == 0) {
// Antes -> header('location: mipagina.php');
?><script>location.href='mipagina.php';</script><?
}

roman
10-05-2004, 01:03:55
no obstante cuando tenemos ya salida html y queremos redirigir a otra página, lo único que nos queda es echar mano de JavaScript.


Aunque dependiendo de las circunstancias se podría hacer uso de ob_start y funciones relacioadas para capturar la salida.

// Saludos