Imágenes en mysql

Soy nuevo en el tema de bases de datos y estoy creando una base en donde en un campo quiero insertar imágenes, estoy usando phpMyAdmin. ¿Cómo puedo hacer?.

1 respuesta

Respuesta
1
Un ejemplo aquí...
[http://bart.escet.urjc.es/\~adltp/tabla.php]
Un ejemplo aquí...
[http://bart.escet.urjc.es/~adltp/tabla.php]
Para cargar el contenido de la imagen en el campo BLOB puedes cargarlo desde el phpMyAdmin, en el apartado insertar... ya que que puedes subir una imagen o cualquier otro tipo de texto.
Para cargarlo, no puedes coger los datos tal cual, para ello debes crear la imagen. Arriba te explico que los archivos de texto tienen una codificación para que los editores de texto los entiendan, pues los archivos binarios, tienen también una codificación para saber el tipo de información que contienen. Esta información viene dada por su Tipo de MIME [http://help.americas.tripod.com/bin/help/D-Herramientas_para_Homepage_Building/A-Tipos_de_MIME_y_archivos].
Dependiendo del tipo de imagen este será image/png, image/gif, image/jpeg,... Deberías guardar este tipo en otro campo de la misma tabla.
Ahora bien para mostrar los datos necesitas otro archivo de php para generar la imagen.
Por ejemplo, imagina que la tabla es sobre personas. Entonces tienes que tu clave primaria [http://www.mysql-hispano.org/page.php?id=27&pag=2] es DNI. Otros campos son Nombre, Apellidos y Foto (nuestro campo BLOB; añadimos el campo mime para el tipo de datos).
Para mostrarlos deberíamos hacer algo así:
<table>
<tr><th>DNI</th><th>Nombre</th><th>Apellidos</th><th>Foto</th>
<?php
$rs=mysql_query("SELECT * FROM personas");
while($row=mysql_fetch_array($rs)){
echo "<tr>
<td>{$row['dni']}</td>
<td>{$row['nombre']}</td>
<td>{$row['apellidos']}</td>
<td><img src=\"imagen.php?dni={$row['dni']}\"/></td>
</tr>";
}
?>
</table>
Si nos fijamos en la línea
<img src=\"imagen.php?dni={$row['dni']}\"/>
Vemos que llamamos a otro php para que nos sirva la imagen, pasándole la clave primaria, en nuestro caso, el DNI.
Este archivo sería de la siguiente forma:
imagen.php
----------
<?php
$rs=mysql_query("SELECT foto, mime FROM personas WHERE dni='".$_GET["dni"]."'");
$row=mysql_fetch_array($rs);
Header('Content-type: '.$row["mime"]);
echo $row["foto"];
?>
-------
MySQL no permite guardar imágenes de la misma forma en la que te permite hacerlo Access. Pero hay formas sencillas de hacerlo, y es mediante un campo de tipo BLOB [http://dev.mysql.com/doc/mysql/en/blob.html,ingl%C3%A9s ].
Las imágenes, como todos los archivos, se compone de bits que conforman la información de la misma. Hay varios tipos de archivos: los de texto y los binarios. Ambos realmente se componen de bits, o ceros y unos, pero difieren en la forma de entender esos bits. En el caso de los de texto, se interpretan según el sistema de codificación que usemos (ascii, iso-8859-1, utf-8) y suelen ser legibles desde cualquier editor de texto.
Los binarios, son interpretados por el programa que los abre de la forma que su formato lo disponga. Así si lo abrimos con un editor de texto, nos encontraríamos con un montón de caracteres raros, ya que no hay codificación alguna de esos caracteres.
Pues bien, el tipo BLOB permite guardar información de tipo binario, de manera que si cogemos un archivo de imagen y cogiéramos su contenido (por ejemplo, con PHP: fopen($fichero,'b') [http://php.net/fopen&#93; y luego leer con fread [http://php.net/fread&#93;).
Ese contenido del fichero lo guardas en tu base de datos, en el campo de tipo BLOB. De ahí siempre puedes volver a cogerlo y crear un fichero o enviar la imagen a través de HTTP, consignando cabeceras adecuadas(ej:
<?php
Header('Content-type: image/jpeg');
$resultados=HagoSQLyCojoPrimeraTupla("SELECT imagen FROM tabla");
echo $resultados["imagen"];
?>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas