Ver Mensaje Individual
  #7 (permalink)  
Antiguo 30/06/2009, 10:21
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error al comparar campos Mysql

En ese punto lo más conveniente es restringir el ingreso de los valores a nivel aplicación. Es mucho más simple resolverlo de esa forma que quitarle flexibilidad a los motores de bases de datos.
Esto es: Si ese campo sólo va a tener números, entonces lo mejor es hacer que la aplicación sólo manipule números para esas consultas.
Para los programadores el criterio de flexibilidad que se aplica en los motores de bases de datos es un poco difícil de comprender, pero la idea central es que una base de datos debe responder consultas, no hacer validaciones que se trabajan en un nivel más alto; es por eso que el DBMS tolera ciertas cosas en pos de no impedir la ejecución de sentencias que son contextualmente válidas, aunque no estén redactadas con la precisión esperable.
Las validaciones de tipos de dato operan, en la base, no a nivel de datos entrantes, sino internamente: parámetros a stored procedures, triggers, functions, tablas, joins, índices, etc.
Para la validación de los datos enviados a las bases, están los conectores (.Net, java, etc), los que operan en la aplicación. A nivel de datos entrantes, lo que importa es la flexibilidad.

En resumen: Lo que debes tratar es de validar los datos ANTES de enviarlos a la base, ya que los DBMS están optimizados para consultas, no para reemplazar las capacidades de los lenguajes de programación.

Sugerencias:
Si vas a comparar datos numéricos con campos numéricos, no pongas los valores numéricos entre comillas. De esa forma si lo que entra es una cadena de caracteres sí se producirá un error. Esto:
Código sql:
Ver original
  1. SELECT id, nombre FROM nodo WHERE departamento =aaaa ORDER BY id
te hubiese devuelto un error por campo no encontrado, en lugar de ejecutarse con corrección.
En su lugar, debería ir algo así:
Código sql:
Ver original
  1. SELECT id, nombre FROM nodo WHERE departamento = 3 ORDER BY id

Que te devolvería un registro vacío si no existe el id=3.

Otro tip: Las fechas van en el formato 'yyyy-MM-dd', porque ese es el formato ANSI, si las quieres usar de otro modo hay que apelar a las funciones de fecha y hora de MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)