Bueno... la respuesta a por qué hará lo que describiste es por tu uso de la función header(). En PHP, no puede imprimir nada antes de una llamada de encabezado, ya que esto indica al servidor web que prepare un encabezado de contenido. Por lo general, reemplazan por completo todo el contenido.
En segundo lugar, me gustaría mencionar que almacenar imágenes en una base de datos suele ser una mala idea por dos razones.
- Tiene un impacto significativo en el rendimiento y la representación.
- Tiene que escribir un código que represente los datos del blob en lugar de solo mostrar la imagen en sí.
El método preferido para la presentación de imágenes basadas en bases de datos sería tener las imágenes almacenadas en un directorio y sus nombres de archivo almacenados en la base de datos. Ahora, cuando desee mostrar las imágenes, simplemente necesita consultar en la base de datos qué nombres de archivo desea mostrar y luego simplemente incluir el nombre de archivo en un atributo HTML.
La ejecución es mucho más rápida también.
Además, me gustaría señalar que si desea que una secuencia de comandos realmente haga su representación, querrá que esa secuencia de comandos defina su encabezado y luego reproduzca o imprima la mancha de imagen después de definir el encabezado.
Tenga en cuenta que cuando crea su etiqueta html... que en el atributo src, lo haría algo más como esto;
<img src="image.php?id=<some_number>">
Ahora, su archivo image.php escupirá los datos de la imagen en la etiqueta.