Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Algo parecido al try...except (https://www.clubdelphi.com/foros/showthread.php?t=9151)

__cadetill 15-04-2004 15:41:52

Algo parecido al try...except
 
Hola compas

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

Código PHP:

  $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

Código PHP:

  $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 16:38:29

Cita:

Empezado por cadetill
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 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 16: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:

Código PHP:

@mysql_pconnect(...) 

que evita el mensaje para dicha llamada en particular.

// Saludos

__cadetill 15-04-2004 17: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 17: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:

Código:

  // 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 17:21:49

Cita:

Empezado por kinobi
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 19:23:58

Cita:

Empezado por roman
¿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 20:47:16

Cita:

Empezado por roman
Código PHP:

@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 21:46:37

Cita:

Empezado por jachguate
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/languag...rorcontrol.php

// Saludos

jachguate 15-04-2004 22: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 13:50:34

Quizas llega un poco tarde, pero en Firebir lo tengo asi y esta controlado

Cita:

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

Mick 26-04-2004 22: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 22: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 17:34:00

¿Qué diferencia hay entre "mysql_connect" y "mysql_pconnect"?

__cadetill 27-04-2004 17:52:18

Mira esta página

Muy recomendable este manual on line sobre PHP ;)

jachguate 27-04-2004 17: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 18:05:37

Sí, perdón, pero como vi que hablaban del comando ese, pues aproveché :p

Emilio 09-05-2004 22: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.

Código PHP:

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


roman 10-05-2004 00:03:55

Cita:

Empezado por Emilio
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


La franja horaria es GMT +2. Ahora son las 22:01:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi