Ver Mensaje Individual
  #13 (permalink)  
Antiguo 07/09/2011, 09:42
Avatar de vgonga1986
vgonga1986
 
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Control de errores como Dios manda

Buenas,

No has entendido bien el or die, jejeje... No es un invento, es una operación lógica como otra cualquiera.
A or B

Si A se evalúa a true, ya no evalúa B. Si A se evalúa a false, entonces sigue con la parte de B. Si tú pones esto:
Código PHP:
Ver original
  1. mysql_query("...") or die("...");

Lo que estás haciendo es que tu A es mysql_query() y tu B es die(), con una operación lógica or en medio. Qué hace esto:
- Si mysql_query se ejecuta correctamente, devuelve algo que es distinto de false y ya no evalúa la parte B, porque el or ya resulta true. Sólo ejecutas el query.
- Si mysql_query da algún error, entonces devuelve false. Como ha devuelto false, PHP tiene que seguir evaluando la operación lógica, para ver si da false o true, por lo que ejecuta la parte B. Y qué tienes en la parte B? Un die(). Luego mata el proceso, mostrando el mensaje que le pongas.

Esto se podría traducir así:
Código PHP:
Ver original
  1. if (!mysql_query("...")) {
  2.    die("...");
  3. }

Para que el error lo muestre en la página, pero no finalice la ejecución del script tendrías que hacer lo siguiente:
Código PHP:
Ver original
  1. if (!mysql_query("...")) {
  2.    echo "...";
  3. }

O, lo que es lo mismo:
Código PHP:
Ver original
  1. mysql_query("...") or echo "...";

La gente utiliza tanto eso junto que le parece que es un invento de PHP, pero es tan simple como eso que he explicado. No es ninguna panacea y se puede usar como se quiera. De hecho, puedes hacer algo parecido con el AND, pero con un detalle. El and normal en PHP se pone &&, esto evalúa todas las opciones, si utilizas & deja de evaluar cuando encuentra un false. Por ejemplo:
Código PHP:
Ver original
  1. if (!isset($variable) && $variable = 0)

Esto podría dar un error no controlado, ya que si no está declarada $variable, la primera parte da false, pero la segunda te da error de PHP, porque estás intentando acceder a $variable y no existe. Sin embargo, si haces así:
Código PHP:
Ver original
  1. if (!isset($variable) & $variable = 0)

Nunca te va a dar error, porque si $variable no está declara, la primera comprobación da false y, directamente, no evalúa la segunda, por lo que estás a salvo.

Consejillos y detallitos que no suelen aparecer en los manuales.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?