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:
y esto otro, no:
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:
¿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:
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.