inconveniente de funcionamiento de errores con mysql

Iniciado por gowend, 29 Noviembre 2012, 03:59 AM

0 Miembros y 1 Visitante están viendo este tema.

gowend

Hola a todos, voy al grano, tengo la tarea de realizar un por decir así sistema de errores, en una tabla llamada errores voy a insertar los errores de base de datos que ocurran en cualquier script del proyecto, yo utilizo mvc, pero lo voy a hacer de manera sencilla.

index.php

Código (php) [Seleccionar]

<?php
require_once 'conexion.php';

mysq_select_db('test',$con);

$sql "SELECT id, nombre FROM usuario LIMIT 25; ";

$resultado mysql_query($sql,$con) or die (errorSql($_SERVER['PHP_SELF'],mysql_error()));

$reg mysql_fetch_assoc($resultado);
//resto del codigo


conexion.php

Código (php) [Seleccionar]

<?php
$host 
"localhost";
$user "root";
$pass "";

$con mysql_connect($host$user$pass) or trigger_error(mysql_error(),E_USER_ERROR);

function 
errorSql($file,$error){
  
$sql "INSERT INTO error (file,error) VALUES ('$file','$error');";
  
$insert mysql_query($sql,$con) or die("Problemas en el Insert ".mysql_error());
  if(
$insert) echo "Ha ocurrido un problema, hemos informado el inconveniente.";
}
?>



El inconveniente consiste en que cuando daño a proposito la consulta del index, se ejecuta bien la función, pero en la linea de conexion.php
Código (php) [Seleccionar]
$insert = mysql_query($sql,$con) or die("Problemas en el Insert ".mysql_error()); apareciendo en el navegador el informe de error de index. en el srcipt de conexion.php como si perteneciera a ese script, siendo que se paso por parametro a la funcion errorSql. Espero haya sido claro y si no puedo volver a explicarlo, espero me puedan ayudar con mi inconveniente y si no, pues ojala se aprenda un poco de este tema.
Gowend132 El conocimiento es LIBRE!!!

#!drvy

Es lo que tiene el error reporting de mysql. De todos modos, no es nada recomendable mostrar el error real al visitante.. en todo caso guárdalo en un log o algo pero nunca muestres el error real en un script destinado al visitante.

PD: Te sugiero que uses mysqli. mysql se considera "desaconsejado" y es probable que quede marcado como obsoleto/eliminado en futuras versiones de PHP.


Saludos

gowend

En realidad no se deberia mostrar al usuario ni es lo que pretendo, lo que deseo es guardar el string del error en una tabla junto con el nombre del archivo en que se origino, pero no se puede ejecutar ese insert debido a que sale el error de mysql del archivo index.php en el script de conexion.php.
Gowend132 El conocimiento es LIBRE!!!

2Fac3R

La verdad es que no encuentro ningún error de sintáxis pero hay algo que me llamó la atención, no sé si es porque no lo he usado antes y no lo conozco o sea un "error" en el código.

A mi no me funciona así:

Código (php) [Seleccionar]

$con = mysql_connect($host, $user, $pass) or trigger_error(mysql_error(),E_USER_ERROR);


Prefiero usar el típico "or die()" y de esa manera si funciona.
PD: No he probado todo el código, otro error posible sería relacionado con la conexión a la bd, aunque no creo.
Zalu2
Escuela de Hackers & Programación. http://ihackndev.blogspot.com/

gowend

En realidad no hay ningun error de sintaxís, lo que quiero es registrar en una tabla los (posibles) errores que ocurran en una ejecución. Y en cuanto al trigger_error, era el unico que no me detenia las siguiente funciones de mysql con el error anterior.
Gowend132 El conocimiento es LIBRE!!!

Servia

Cita de: gowend en  5 Diciembre 2012, 20:54 PM
En realidad no hay ningun error de sintaxís, lo que quiero es registrar en una tabla los (posibles) errores que ocurran en una ejecución. Y en cuanto al trigger_error, era el unico que no me detenia las siguiente funciones de mysql con el error anterior.

Mediante error_log ya puedes guardarlo todo en un mismo archivo, para nada es recomendable que lo guardes en la db, acabarás ignorando tales errores. Evidentemente mucho peor es hacer el die.
Piensa por un momento que el mySQL está caído ¿Qué crees que pasará? Los procesos de PHP se acabarán bloqueando con la tontería del bucle.

gowend

Tienes toda la razón, contemple en mis posibilidades la opción del error_log, pero pense que tal vez existía la forma de conseguirlo, pero tu punto es mas que claro. Gracias por tu comentario  ;)
Gowend132 El conocimiento es LIBRE!!!