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?
Respuesta
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());
.
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. –
good point chris –
Probablemente pueda verificar LAST_INSERT_ID() (mysql_insert_id() en PHP). Siempre que su tabla tenga la columna auto_increment.
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. –
-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
Puede usar mysql_error php.net/mysql_error para obtener una mejor explicación que luego mostrar o registrar en un archivo.
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 unaresource
en caso de éxito, oFALSE
en error.Para otro tipo de sentencias SQL,
INSERT
,UPDATE
,DELETE
,DROP
, etc,mysql_query()
vuelveTRUE
en éxito oFALSE
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
- Para que, puede utilizar
mysql_error
ymysql_errno
.
- Para que, puede utilizar
- 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.
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. –
sugiero hacer un contenedor para mysql_query que detecta y registra el fracaso de la consulta, más mysql_error algún lugar
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.
Si la causa del error es un interbloqueo, es posible que desee volver a intentarlo.
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
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
sí, tienes razón. – cleanunicorn
Puede comprobar el número de filas de MySQL ha insertado/modificado/borrado haciendo esta consulta justo después de su inserción/actualización/eliminación de consulta.
SELECT ROW_COUNT() as rows_affected
Si esto devuelve 0
su inserción falló. Si devuelve 1
o más, lo ha logrado.
Ver: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count
- 1. Comprobando si mysql_query devolvió algo o no
- 2. Catching mysql_query error
- 3. ¿Qué pasa si falla un disparador?
- 4. ¿Qué pasa si falla el nuevo?
- 5. mysql_query donde instrucción
- 6. Cuando mysql_query devuelve falso
- 7. Cómo hacer que Capistrano NO retroceda si falla una tarea
- 8. ¿Qué debo hacer si falla un método de compilación de Moose?
- 9. ¿Qué hacer si git-am falla con "no coincide con el índice"?
- 10. ¿Qué debería devolver un constructor de JavaScript si falla?
- 11. ¿De qué sirve JSLint si jQuery falla la validación
- 12. ¿Qué hace boost :: thread si falla al crear el hilo?
- 13. ¿Qué sucede si falla el constructor de shared_ptr?
- 14. ¿Cómo hacer que gdb salga si el programa tiene éxito, se rompe si el programa falla?
- 15. SQL Injection a través de mysql_query
- 16. writeToFile falla - ¿cómo puedo depurar POR QUÉ falla (qué herramientas)?
- 17. ¿Por qué openssl_pkey_new() falla?
- 18. ¿Por qué GetGenericTypeDefinition falla?
- 19. PHP cambiando viejo mysql_query a PDO
- 20. ¿Cuál es la forma correcta de comprobar si mysql_query() devolvió algún resultado?
- 21. ¿Cómo salir si falla un comando?
- 22. Finalizar NSTask incluso si la aplicación falla
- 23. RequireJS: respaldo local para si CDN falla
- 24. Si falla la afirmación, ¿hay algún error?
- 25. proceso msbuild parada si un destino falla
- 26. ¿Por qué $ .getJSON falla silenciosamente?
- 27. ¿Por qué falla Convert.ToBoolean ("0")?
- 28. ¿Qué causa una falla SIGABRT?
- 29. ¿Cómo se hacen múltiples declaraciones SQL en una mysql_query?
- 30. ¿Por qué no falla este elenco genérico?
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