Bueno, el error es bastante simple.
Mira:
Código SQL:
Ver originalSELECT *
FROM producto_productos
WHERE IDProducto_Catalogo=".$reg['IDProducto_Catalogo']."
UNION
SELECT *
FROM producto_productos JOIN producto_xtras ON producto_productos.IDProducto_Producto = producto_xtras.IDProducto_Producto
WHERE producto_xtras.IDProducto_Catalogo = '" . $reg['IDProducto_Catalogo'] . "'
Estás haciendo un UNION sobre el resultado de la consulta a una tabla, con otra consulta a la misma tabla con un JOIN contra una segunda tabla,
pero estás pidiendo todas las columnas de cada SELECT, y el segundo tiene más columnas que el primero.
El UNOIN en todos los DBMS requiere que ambas consultas devuelvan la misma cantidad de columnas, en el mismo orden y del mismo tipo.
Por otro lado, a nivel de PHP, ni siquiera te estás molestando en verificar que la query enviada se haya ejecutado correctamente. Tu asumes que funcionó bien, y eso es algo que nunca se debe asumir.
Debes
siempre verificar si la ejecución de la query fue exitosa,
antes de intentar hacer algo con ese result. Que esté correctamente escrito todo, no implica que la query devuelva algo... en especial si ese algo depende de variables...