Ver Mensaje Individual
  #7 (permalink)  
Antiguo 11/02/2015, 17:34
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: Funcion SELECT no devuelve datos

Cita:
En la funcion hago lo siguiente para depurar, retorno la variable $res que devuelve true //hago el comentario en la misma funcion.
Ese es un error conceptual muy común cuando estás empezando a trabajar en programación con acceso a BBDD.
Que una query enviada a la base devuelva TRUE no implica que devuelve datos, sólo indica que no se produjo un error de ejecución, permisos, o sintaxis. Pero NO que la consulta devolviese registro.
Obtener un array con cero registros no es un error. Es un resultado probable cuando no hay datos que cumplan las condiciones.
¿Se entiende la distinción?

El problema es simple: Si esto devuelve datos:
Código MySQL:
Ver original
  1. SELECT codigo, descripcion FROM productos;
y esto otro, no:
Código MySQL:
Ver original
  1. SELECT producto.codigo
  2. FROM producto
  3. WHERE producto.codigo='. "'" . $precioproducto . "'". '
Entonces lo que tiene un dato que no existe en la tabla "productos" es la variable... Eso, o está vacía, y lo que se está ejecutando en MySQL es esto:

Código MySQL:
Ver original
  1. SELECT producto.codigo
  2. FROM producto
  3. WHERE producto.codigo=''

¿Se entiende?

Si la variable contiene un valor que no existe en la base, o está vacía, simplemente se ejecutará y se obtendrá un array vacío, con los nombres d los encabezados indicados en el SELECT, es decir: "codigo", "pau@S" y "pbu@S".
Pero no tendrás datos.

Una de las formas de obligar a MySQL a devolver un error es cuando validas contra un dato numérico. Los números no van entre apostrofos, de modo que cuando creas la query, si el campo a comparar es numérico, pones así:
Código PHP:
$consulta $db->prepare("SELECT precio.codigo, precio.`pau@S`, precio.`pbu@S`
    FROM precio                
    WHERE precio.codigo = 
        (SELECT producto.codigo
        FROM producto
        WHERE producto.codigo="
.$precioproducto.")"); 
De ese modo, si la variable llega vacía, la query queddará armada de este modo:
Código MySQL:
Ver original
  1. SELECT precio.codigo, precio.`pau@S`, precio.`pbu@S`
  2.     FROM precio                
  3.     WHERE precio.codigo =
  4.         (SELECT producto.codigo
  5.         FROM producto
  6.         WHERE producto.codigo= )
Si observas, le falta el segundo término de la condición en el WHERE, lo que dispararía un error de sintaxis, que te permitiría instantáneamente saber que el dato no está llegando a tu función...

El usar apostrofos en datos numéricos de la base esconde errores de programación. No es recomendable.

Queda claro que esto sólo aplica a columnas numericas y datos numéricos, ¿no? Si el dato es de caracteres o fechas, los apóstrofos son obligatorios para el SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)