2010-03-10 47 views
9

A veces ocurre que mysql_query() no puede INSERTAR datos y no los conozco. Entonces, la pregunta es ¿cómo sé cuándo sucede?si mysql_query() falla, ¿qué hacer?

+3

no creo que esta cuestión merece downvotes. Es básico, pero está razonablemente bien redactado y las respuestas hasta ahora han sido sinceras. Ustedes idiotas de Pod Six necesitan cortarlo. – Drew

Respuesta

0

tienes que analizar tu sql. ¿escapaste tus parámetros? Parece que este podría ser el problema. Puede pegar su sql para que podamos ayudarlo.

para mostrar el error, por ejemplo.

$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); 

.

+4

Si bien esta es una buena respuesta para identificar qué causó el error, no creo que esto esté respondiendo a lo que el OP está pidiendo. Creo que el OP quiere saber cómo determinar cuándo falla, no qué podría hacer que falle. –

+0

good point chris –

-2

Probablemente pueda verificar LAST_INSERT_ID() (mysql_insert_id() en PHP). Siempre que su tabla tenga la columna auto_increment.

+0

if mysql_insert_id() devuelve 0 y su tabla tiene una columna auto_increment, luego el último INSERT falló. preferiría mysql_error, sin embargo. –

+0

-1, last_insert_id() le mostrará el número de inserción de la inserción anterior en (posiblemente otra) tabla si esta inserción falló. No significativo de ninguna manera en absoluto. – Johan

3

Puede usar mysql_error php.net/mysql_error para obtener una mejor explicación que luego mostrar o registrar en un archivo.

9

Citando la página de documentación de mysql_query:

Para SELECT, SHOW, DESCRIBE, EXPLAIN y otras declaraciones de regresar de resultados, mysql_query() devuelve una resource en caso de éxito, o FALSE en error.

Para otro tipo de sentencias SQL, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() vuelve TRUE en éxito o FALSE en caso de error.

Por lo tanto, para detectar si ha habido un error o no, usted tiene que probar el valor de retorno de la llamada a mysql_query:

$result = mysql_query('...'); 
if ($result === false) { 
    // And error has occured while executing 
    // the SQL query 
} 


Entonces, ¿qué se puede hacer?

  • Bueno, en primer lugar, se puede registrar el error en un archivo, que puede analizar más adelante
  • Y puede mostrar un mensaje de error al usuario agradable
    • es decir, una especie de "Uy, un error página produjo".

Recuerde, sin embargo: el usuario no necesita saber (y no va a entender) el mensaje de error técnico - así que no mostrarlo.

+0

Definitivamente debe usar mysql_error() si obtiene una consulta que falla. No siempre es terriblemente útil, especialmente si tienes una consulta grande. Pero puede ayudarlo a diagnosticar cuál es el problema. –

1

sugiero hacer un contenedor para mysql_query que detecta y registra el fracaso de la consulta, más mysql_error algún lugar

1

Si está utilizando una biblioteca de cliente sensible, se lanzará una excepción cuando un comando SQL falla, y se puede examinar la código de error programáticamente para saber qué hacer.

Si no tiene código manejando esa ruta de error específica, probablemente debería ejecutar un controlador de error estándar que registra el error, el seguimiento de la pila y otra información de depuración en un registro.

0

Si la causa del error es un interbloqueo, es posible que desee volver a intentarlo.

3

Un cheque que suelo hacer es como en el ejemplo

$result = mysql_query($query); 
if (!empty($error = mysql_error())) 
{ 
    echo 'Mysql error '. $error ."<br />\n"; 
} 
else 
{ 
    // the query ran successfully 
} 

Este es un buen cheque por cualquier tipo de consultas

+1

buen toque, pero en producción no quieres eso porque la multitud de inyección SQL sabrá cómo explotar tus debilidades de forma mucho más fácil. – Johan

+0

sí, tienes razón. – cleanunicorn

Cuestiones relacionadas