2011-12-20 15 views
9

Además de escribir la consulta incorrecta y no tener permisos para acceder a una tabla, ¿cuándo mysql_query devuelve falso? ¿Hay algún otro caso?Cuando mysql_query devuelve falso

+0

¿Alguna razón por la que necesita una información tan extraña? –

+0

Estoy modificando el código heredado y descubrí que la mayoría de las veces prácticamente no hay administración de errores, así que estoy tratando de aprender más para eventualmente modificarme mejor. Encontré los documentos no perfectos en este caso. – AsTheWormTurns

Respuesta

14

Consulte la guía de referencia:

Por SELECT, SHOW, describir, explicar y otras declaraciones de regresar de resultados, mysql_query() devuelve un recurso en caso de éxito, o FALSE en caso de error .

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

El recurso de resultado devuelto se debe pasar a mysql_fetch_array(), y otras funciones para tratar las tablas de resultados, para acceder a los datos devueltos.

Use mysql_num_rows() para averiguar cuántas filas fueron devueltas por una declaración o mysql_affected_rows SELECT() para averiguar cuántas filas se vieron afectados por un DELETE, INSERT, REPLACE, o UPDATE.

mysql_query() también fallará y devolverá FALSE si el usuario no tiene tiene permiso para acceder a la (s) tabla (s) a las que hace referencia la consulta.

http://php.net/manual/en/function.mysql-query.php

Editar: Aclaración de lo que esos errores son en realidad.

Así que tienen lista de cosas que pueden devolver falsa:

  • Cuando una declaración de MySQL que devuelve un conjunto de resultados obtiene un error
  • Cuando una declaración de MySQL que no devuelve nada obtiene un error
  • Cuando un usuario no tiene permiso para acceder a MySQL una referencia de tabla

En mi opinión el primer 2 son los que son un poco difusa. ¿Cuáles son los posibles errores? Hay 59 errores diferentes de clientes que puede obtener de MySQL. Estos son más errores relacionados con el sistema que podemos suponer que php manejará y probablemente envuelva en una menor cantidad de errores abstractos.

Excepto por los errores del cliente, tiene un conjunto de errores más abstractos que puede encontrar durante el uso que están más relacionados con el uso de la API dentro de la aplicación en lugar del acceso directo al servidor MySQL.Estos son:

  • acceso denegado
  • No se puede conectar con el servidor [locales] MySQL
  • ha perdido la conexión con el servidor MySQL
  • cliente no soporta el protocolo de autenticación
  • contraseña falla cuando se introduce interactivamente
  • Host 'host_name' está bloqueado
  • Demasiadas conexiones
  • Fuera de la memoria del servidor
  • MySQL se ha apagado
  • paquete demasiado grande
  • Errores de comunicación y conexiones abortadas
  • La mesa está llena
  • no puede crear/escribir en el archivo
  • Comandos de cada sincronizar
  • Haciendo caso omiso de usuario
  • no existe Tabla 'tbl_name'
  • no puede inicializar Char acter establece
  • corrupción Tabla emite
  • cuestiones relacionadas Sintaxis

Aquí son las referencias de lo que acabo de decir:

+0

I rojo esa página ANTES de publicar y no entendí una cosa: cuando un INSERT puede devolver falso? – AsTheWormTurns

+0

@AsTheWormTurns, cuando algo va mal y NO se han insertado los valores. – Shoe

+0

@Jeff Pigarelli: mi pregunta está buscando ese "algo" :-) – AsTheWormTurns

2

Por desgracia, la guía de referencia no es muy específica cuando se trata de lo que son posibles formas de activar errores. Además de las declaraciones sintácticamente inválidas y no tener permisos, exceder el límite para crear nuevas declaraciones es un posible error que podría aparecer si está experimentando una carga alta.

4

Gracias por su comentario.
Estoy seguro de que no hay necesidad de profundizar en tales detalles.

Lo que realmente necesita es un mensaje de error que puede leer y así obtener información sobre el problema en particular.

Por lo tanto, parece que la función mysql_error() es realmente lo que estás buscando.

$res = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql); 

parece suficiente.

+0

Gracias y lo siento si la pregunta sonaba demasiado extraña. :-) – AsTheWormTurns

+0

parece que no solo sonaba sino que también tenía el mismo significado extraño. Buena suerte en inventar la rueda cuadrada. –

+0

Sharpnel: el problema es que el código que modifiqué no tenía ruedas. :-) – AsTheWormTurns

1

consulta UPDATE devolverá false si la consulta se escribe correctamente, pero no hay filas afectadas, por ejemplo:

UPDATE `table` SET `id`=1 WHERE `id`=1 
0

tuve este error y mysql_error() devuelve "servidor MySQL se ha ido". Mi consulta fue una consulta muy simple seleccionando * de una tabla muy pequeña. Cuando cambié "Seleccionar *" para seleccionar las dos columnas que quería, resolvió el problema. "Select *" es una codificación perezosa que conozco, ¡pero nunca soñé que la consulta no se ejecutara en absoluto!

Cuestiones relacionadas