2011-05-25 10 views
8

A veces estoy recibiendo un error de base de datos como¿Hay alguna forma de detectar MySQL y errores de base de datos en PHP?

Advertencia: mysql_connect() [function.mysql-connect]: Acceso denegado para 'test'@'101.190.193.83' usuario (usando la contraseña: SÍ)

no se pudo conectar: ​​Acceso denegado para 'test'@'101.190.193.83' usuario (usando la contraseña: SÍ)"

Pero realmente no hay ningún cambio en la contraseña

¿hay alguna forma. para capturar este error en un archivo de registro y muestra algún mensaje agradable en la pantalla, como "Error del servidor. Por favor, inténtelo de nuevo algún tiempo."

+0

En realidad estoy trabajando en un proyecto Open Source para detectar errores, mostrar un mensaje en la pantalla y regístrelos con mucha más información de la que proporciona el registro de errores estándar. http://jarofgreen.co.uk/2011/01/tracking-errors-with-php/ o http://elastik.sf.net/ – James

Respuesta

3
<?php 
    $connect = mysql_connect(HOST, USER, PASS); 
    if(!$connect) { echo 'Server error. Please try again sometime. CON'; } 

    $select_db = mysql_select_db(DATABASE); 
    if(!$select_db) { echo 'Server error. Please try again sometime. DB'; } 
?> 
+0

Falta el formato, aparentemente stackoverflow no lo reconoce .. http: //pastebin.com/EFefnNSp – ChrisH

+3

Lo arreglé por ti. Para obtener el formato del código, coloque 4 espacios (o 1 pestaña) antes de su código. Puede hacerlo fácilmente seleccionando el texto y presionando CTRL + K. – drudge

+0

@Jnpcl gracias! Aprendí algo nuevo :) – ChrisH

10

Si no desea que PHP para mostrar la advertencia, usted tiene que utilizar la '' operador @

$connect = @mysql_connect(HOST, USER, PASS);//won't display the warning if any. 
if (!$connect) { echo 'Server error. Please try again sometime. CON'; } 

También puede considerar el establecimiento de display_errors 0 en su archivo de php.ini en la producción

también puede considerar PDO para conectar a MySQL, se trata de utilizar excepciones como predeterminado para informar de errores,

try { 
    $dbh = new PDO($dsn, $user, $password); 
} catch (PDOException $e) { 
    echo 'Could not connect : ' . $e->getMessage(); 
} 
+2

+1 uso de PDO es muy recomendable. –

3

¿Hay alguna forma de capturar estos errores en el archivo de registro ...?

Sí. Todos los errores y advertencias de PHP se escriben en el archivo de registro de errores del servidor web, por lo que no hay nada más que deba hacer, ya se está realizando.

Para responder a la segunda parte de su pregunta, si no desea que el mensaje de error prima aparece en la pantalla, puede evitar esto en una de dos maneras:

  1. uso del símbolo en @ al frente de su llamada de función, es decir, $db = @mysql_connect(...);. Esto desactivará los informes de error solo para esa llamada de función específica. En general, se considera que es una mala idea usar esta técnica en exceso, pero es una actividad legítima ocasionalmente.

  2. La mejor opción puede ser a su vez el indicador global informe de errores, ya sea en su PHP.ini, en su archivo local .htaccess, o el uso de ini_set() dentro del programa.

Normalmente, los informes de errores en la página web solo se deben utilizar mientras desarrolla el sitio. Una vez que el sitio se publique, debe activar el informe de errores para que no aparezcan errores de PHP en lugares aleatorios en su diseño de página cuidadosamente diseñado frente a sus clientes. Cualquier error que ocurra se escribirá en el registro de errores del servidor, pero no se mostrará en la página.

Para los errores de MySQL, como el que tiene, todavía puede obtener el error en el programa utilizando la función mysql_error(). Esto contendrá los detalles del último error que ocurra, por lo que puede verificarlo programáticamente y reportar un mensaje de error sensible.

0
try { 
    $dbh = new PDO($dsn, $user, $password); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// if your are not set this attributes you won't get any exceptions. 
} catch (PDOException $e) { 
    echo 'Server error. Please try again some time.'; 
} 
1

Fuente: http://wallstreetdeveloper.com/php-database-connection/

Aquí hay un código de ejemplo para la conectividad de base de datos en PHP:

<?php 
//Step-1 : Create a database connection 
$connection=mysql_connect(“localhost”,”root”,”root”); 
if(!$connection) { 
    die(“Database Connection error” . mysql_error()); 
} 
//Step-2 : Select a database to use 
$db=mysql_select_db(“widget_corp”,$connection); 
if(!$db) { 
    die(“Database Selection error” . mysql_error()); 
} 
?> 
<html> 
<head> 
<title>Database</title> 
</head> 
<body> 
<?php 
//Step 3 : Perform database Queury 
$result=mysql_query(“select * from subjects”,$connection); 
if(!$result) { 
    die(“No rows Fetch” . mysql_error()); 
} 

//Step 4 : Use returned data 
while($row=mysql_fetch_array($result)) 
{ 
    //echo $row[1].” “.$row[2].”<br>”; 
    echo $row["menu_name"].” “.$row["position"].”<br>”; 
} 

?> 
</body> 
</html> 
<?php 
//Step 5 : Close Connection 
mysql_close($connection); 
?> 
Cuestiones relacionadas