En una pregunta SO que hice aquí acerca de algún código del que no estaba seguro, alguien respondió "BTW, horrible código allí: usa mucho el símbolo de supresión de errores (@)".
¿Hay alguna razón por la cual esta es una mala práctica? Con cosas como:
$db=@new mysqli($db_info) or die('Database error');
, me permite mostrar solo un mensaje de error personalizado. Sin la supresión de errores, aún se mostrará el típico mensaje PHP de:
Advertencia : mysqli :: mysqli (): php_network_getaddresses: getaddrinfo falló: No se conoce dicho host. en alguna \ file \ path en la línea 6
así como 'Error de base de datos'.
¿La supresión de errores siempre es mala y, de ser así, qué tiene de malo específicamente lo anterior?
Actualización: el código real que estoy usando es:
or error('Datatabase error', 'An error occurred with the database' . (($debug_mode) ? '<br />MySQL reported: <b>' . $db->error . '</b><br />Error occurred on line <b>' . __LINE__ . '</b> of <b>' . __FILE__ . '</b>' : ''))
que elimina todos los resultados anteriores y muestra un mensaje de error. Por lo tanto, el hecho de que el mensaje de error no incluya detalles sobre lo que sucedió específicamente (que la gente parece estar sugiriendo como una razón por la cual la supresión de errores es mala) es irrelevante.
or error('Datatabase error', 'An error occurred with the database' . (($debug_mode) ? '<br />MySQL reported: <b>' . $db->error . '</b>' : ''))