Foros del Web » Programando para Internet » PHP »

Problema al leer imagen en binario en mssql

Estas en el tema de Problema al leer imagen en binario en mssql en el foro de PHP en Foros del Web. Quiero leer y mostrar una imagen de tipo image de una base de datos de mssql y no me la muestra. A ver si me ...
  #1 (permalink)  
Antiguo 08/10/2011, 14:47
Avatar de todfig  
Fecha de Ingreso: abril-2009
Mensajes: 21
Antigüedad: 15 años
Puntos: 0
Problema al leer imagen en binario en mssql

Quiero leer y mostrar una imagen de tipo image de una base de datos de mssql y no me la muestra. A ver si me podéis echar una mano...

Esta es la tabla:

Imagenes
[Codigo] [int] NOT NULL,
[Descripcion] [nvarchar](50) NULL,
[Fichero] [nvarchar](100) NULL,
[KBFichero] [float] NOT NULL,
[Imagen] [image] NULL

Llamada a archivo php que me debería mostrar la imagen. Esta conexión me lee y conecta bien.
$consulta = mssql_query("select * from Imagenes");
while ($registroI = mssql_fetch_array($consulta))
{
echo "<img src=\"image.php?id=".$registroI['Codigo']."\">";
}

image.php
<?php
$conexion_sqlserver = mssql_connect("...,...,...") or die ("No conecta con SQLSERVER");

$consulta_sql = mssql_query("SELECT * FROM Imagenes WHERE Codigo =".$_GET['Codigo']);

while ($registro = mssql_fetch_array($consulta_sql))
{
echo "Entra al while";
header('Content-type: image/jpg');
echo $registro[Imagen];
}

?>

¿Hace falta editar algo en el php.ini? ¿véis algún error?
Gracias
  #2 (permalink)  
Antiguo 08/10/2011, 15:13
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Problema al leer imagen en binario en mssql

en algunos servers si no pones los paramaetros en la consulla entre comillas la consulta no funciona trata de cambiar esta linea por esta otra


$consulta_sql = mssql_query("SELECT * FROM Imagenes WHERE Codigo =".$_GET['Codigo']);

por

Código PHP:
Ver original
  1. $consulta_sql = mssql_query("SELECT * FROM Imagenes WHERE Codigo ='$_GET[Codigo])' ");

fijate que $_GET['Codigo']) este entre comillas simples y quitas las que estan dentro de lo []

otra forma de hacer esto subir la imagen al server y guardar en una campo string de la base de datos la direccion fisica del fichero, aunque esta es menos eficiente, pero bueno es otra opcion

Saludos
  #3 (permalink)  
Antiguo 08/10/2011, 15:22
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema al leer imagen en binario en mssql

Cita:
Iniciado por shaserUsa Ver Mensaje
en algunos servers si no pones los paramaetros en la consulla entre comillas la consulta no funciona trata de cambiar esta linea por esta otra


$consulta_sql = mssql_query("SELECT * FROM Imagenes WHERE Codigo =".$_GET['Codigo']);

por

Código PHP:
Ver original
  1. $consulta_sql = mssql_query("SELECT * FROM Imagenes WHERE Codigo ='$_GET[Codigo])' ");

fijate que $_GET['Codigo']) este entre comillas simples y quitas las que estan dentro de lo []
Disculpa pero es una pésima práctica quitarle las comillas a las claves del array tipo cadena literal (Arrays). Para estos casos de debe encerrar entre llaves o concatenar correctamente.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #4 (permalink)  
Antiguo 08/10/2011, 15:26
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Problema al leer imagen en binario en mssql

Si te fijas no esta pasando un literal sino un codigo mediante el metodo get cosa que tampoco comparto deberia ser post, nunca he tenido problemas al quitar las comillas simples dentro de las comillas dobles y ya llevo mas de 8 años con PHP pero bueno en la programacion siempre tenemos muchos criterios.


Saludos
  #5 (permalink)  
Antiguo 08/10/2011, 15:28
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema al leer imagen en binario en mssql

$_GET['Codigo']

Correcto es una cadena literal

$_GET[Codigo]

Codigo primero se busca como una constante lo cual es incorrecto y una mala práctica así funcione.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #6 (permalink)  
Antiguo 08/10/2011, 15:31
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Problema al leer imagen en binario en mssql

es que codigo va a variar dinamicamente respecto al valor que se obtenga del $_GET[].
  #7 (permalink)  
Antiguo 08/10/2011, 15:34
Avatar de todfig  
Fecha de Ingreso: abril-2009
Mensajes: 21
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema al leer imagen en binario en mssql

No es el problema de comillas ya que probé eso pasando ahí un código directamente en número.


otra forma de hacer esto subir la imagen al server y guardar en una campo string de la base de datos la direccion fisica del fichero, aunque esta es menos eficiente, pero bueno es otra opcion

En este caso esa opción no la tengo ya que las imágenes ya están subidas en la bd directamente, solo tengo que leerlas.

¿Serán por las configuraciones del php?
  #8 (permalink)  
Antiguo 08/10/2011, 15:35
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema al leer imagen en binario en mssql

Es una mala práctica...

¿Por qué es incorrecto $foo[bar]?

Siempre deben usarse comillas alrededor de un índice de array tipo cadena literal. Por ejemplo, $foo['bar'] es correcto, mientras que $foo[bar] no lo es. ¿Pero por qué? Es común encontrar este tipo de sintaxis en scripts viejos:

Código PHP:
Ver original
  1. <?php
  2. $foo[bar] = 'enemy';
  3. echo $foo[bar];
  4. // etc
  5. ?>

Esto está mal, pero funciona. La razón es que este código tiene una constante indefinida (bar) en lugar de un valor string ('bar' - note las comillas). Puede que en el futuro PHP defina constantes que, desafortunadamente para tal tipo de código, tengan el mismo nombre. Funciona porque PHP automáticamente convierte una cadena pura (un string sin comillas que no corresponda con símbolo conocido alguno) en un string que contiene la cadena pura. Por ejemplo, si no se ha definido una constante llamada bar, entonces PHP reemplazará su valor por la cadena 'bar' y usará ésta última.

Te recomiendo en tus 8 años que actives los errores tipo notice.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #9 (permalink)  
Antiguo 08/10/2011, 15:39
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Problema al leer imagen en binario en mssql

Si ya tienes los binarios guardados en la BD lo que te queda es leer ese campo y poner la imagen, antes de nada asegurate que la consulta funciona correctamente y cuando estes seguro que no tiene errores entonces enfocate en mostrar la imagen, solo es una sugerencia para ir depurando los problemas, puedes antes de nada probar la consulta directamente en el server con el phpmyadmin u otra heramienta que tengas, hazlo asi para que estes seguro que la consulta no tiene problemas, lo demas es mostrar la imagen en el navegador.

Saludos
  #10 (permalink)  
Antiguo 08/10/2011, 15:42
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Problema al leer imagen en binario en mssql

Si tienes control sobre tu variables no tiene porque tener problemas, tengo aplicaciones en varios server y ninguno me ha dado error pero igual, no cambies el carro si aun camina ;) es tu forma de programar y yo tengo la mia miestra sea seguro y funciona ....
  #11 (permalink)  
Antiguo 08/10/2011, 15:43
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema al leer imagen en binario en mssql

shaserUsa Si te gusta programar con malas prácticas es tu problema

todfig Empieza por quitar esta línea

Código PHP:
Ver original
  1. echo "Entra al while";

y comprueba si funciona realmente la consulta. Aunque en muchos sitios dicen que no se recomienda que se guarde la imagen en la base de datos (se debe guardar la ruta y copiar la imagen al servidor), deberías averiguar eso por el foro de MySQL.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 08/10/2011 a las 15:55
  #12 (permalink)  
Antiguo 08/10/2011, 15:59
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Problema al leer imagen en binario en mssql

fue lo primero que dije :)
  #13 (permalink)  
Antiguo 08/10/2011, 16:04
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema al leer imagen en binario en mssql

Cita:
Iniciado por todfig Ver Mensaje
No es el problema de comillas ya que probé eso pasando ahí un código directamente en número.


otra forma de hacer esto subir la imagen al server y guardar en una campo string de la base de datos la direccion fisica del fichero, aunque esta es menos eficiente, pero bueno es otra opcion

En este caso esa opción no la tengo ya que las imágenes ya están subidas en la bd directamente, solo tengo que leerlas.

¿Serán por las configuraciones del php?
todfig no puedes imprimir nada cuando envias un header o sino no generará la imagen pero tampoco mostrará error.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #14 (permalink)  
Antiguo 08/10/2011, 16:05
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Problema al leer imagen en binario en mssql

Checa esta linea

echo $registro[Imagen];

debe ser

Código PHP:
Ver original
  1. echo $registro['Imagen'];

notece las comillas simples en este caso si van
  #15 (permalink)  
Antiguo 08/10/2011, 16:09
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema al leer imagen en binario en mssql

En los 2 casos deben ir las comillas ya sean simples o dobles...

No está de más que leas esto:

COMO: usar las comillas bien

Cita:
otra forma de hacer esto subir la imagen al server y guardar en una campo string de la base de datos la direccion fisica del fichero, aunque esta es menos eficiente, pero bueno es otra opcion
Cuando tengas muchas imágenes va a ser cada vez más pesada la base de datos por todo el contenido que contienen. En cambio almacenando la ruta la diferencia es mucha.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #16 (permalink)  
Antiguo 08/10/2011, 16:13
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Problema al leer imagen en binario en mssql

eso depende del punto de vista que lo veas yo siempre utilizo la de guardar la ruta, por ese mismo problema, pero la forma binaria guardada en la base de datos da mas velocidad a tu aplicaion a la hora de cargar la imagen en el navegador, como ya vez depende del punto de vista por donde lo mires

Saludos
  #17 (permalink)  
Antiguo 08/10/2011, 16:18
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Problema al leer imagen en binario en mssql

Gracias por el articulo

Etiquetas: binario, imagenes, mssql, registro, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:22.