miércoles , 18 julio 2018
Portal » Programacion PHP » Guardar una imagen en la Base de Datos (mysql)

Guardar una imagen en la Base de Datos (mysql)

A continuacion mostraremos una sencilla forma de como realizar la subida de imagenes a nuestra base de datos y no a nuestro servidor.

Inicialmente creamos nuestra bd y lo llamamos “bd_laboratorio“, luego creamos la tabla usando este sql

CREATE TABLE IF NOT EXISTS `subir_imagen` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre_imagen` text NOT NULL,
  `imagen` mediumblob NOT NULL,
  `tipo` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Archivo index.php

<?php
//conexion a la base de datos
$link mysql_connect('localhost''root''');
if (!$link)
   die('Error al conectarse con MySQL: ' mysql_error().' <br>Número del error: '.mysql_errno());
if (! @mysql_select_db("bd_laboratorio",$link)){
   echo "No se pudo conectar correctamente con la Base de datos";
   exit();
}
//le dimos click al boton grabar?
if (isset($_POST['guardar']))
{
$nombre $_FILES['imagen']['name'];
$imagen_temporal $_FILES['imagen']['tmp_name'];
$type $_FILES['imagen']['type'];
//archivo temporal en binario
$itmp fopen($imagen_temporal'r+b');
$imagen fread($itmpfilesize($imagen_temporal));
fclose($itmp);
//escapando los caracteres
$imagen mysql_real_escape_string($imagen);$respuesta mysql_query("insert into subir_imagen (id, nombre_imagen, imagen, tipo) 
values(0, '$nombre', '$imagen', '$type')"$link);
//redireccionamos
header("Location: index.php?".($respuesta 'ok' 'error'));
}
//guardado OK
if (isset($_GET['ok']))
{
echo '<p>Guardado Exitosamente</p>';}
//si no se guardo de manera correcta?
if (isset($_GET['error']))
{
echo '<p>Ocurrio un error a la hora de realizar la insercion...</p>';}

//formulario que nos permite subir a la BD el archivo
echo '
<form action="index.php" enctype="multipart/form-data" method="post">
<input type="file" name="imagen" id="imagen" />
<input type="submit" value="Guardar" name="guardar" />
</form>';
$sql mysql_query("select id, nombre_imagen, imagen from subir_imagen"$link);
$imagenes = array();
while($row mysql_fetch_assoc($sql))
{
$imagenes[$row['id']] = array(
'id' => (int) $row['id'],
'nombre' => $row['nombre_imagen'],
'imagen' => $row['imagen'],
);
}
//existen imagenes para mostrar?
if (!empty($imagenes))
{
echo '<span style="text-decoration:underline;">Imagenes guardadas en la BD:</span>';
foreach($imagenes as $valor)
echo '<p>'$valor['id'] ,' - ' $valor['nombre'] ,' - <a href="ver.php?i='$valor['id'] ,'">Ver Imagen</a></p>';
}
?>

Dicho archivo nos permitira hacer la busqueda y posterior subida a nuestra base de datos, y finalmente poder visualizar el mismo en un listado.

El archivo ver.php nos permitirá visualizar la imagen subida a la Base de Datos.

<?php
//conexion a la base de datos
$link mysql_connect('localhost''root''');
if (!$link)
   die('Error al conectarse con MySQL: ' mysql_error().' <br>Número del error: '.mysql_errno());
if (! @mysql_select_db("bd_laboratorio",$link)){
   echo "No se pudo conectar correctamente con la Base de datos";
   exit();
}
//si enviamos por parametro la id
$id = (int) $_GET['i'];
//no hay id
if (empty($id))
//redireccionamos
header("Location: index.php");$sql mysql_query("select id, imagen, tipo from subir_imagen where id = $id"$link);
$imagenes = array();
while($row mysql_fetch_assoc($sql))
$imagenes[$row['id']] = array(
'id' => $row['id'],
'imagen' => $row['imagen'],
'tipo' => $row['tipo'],
);
//existen imagenes para mostrar?
if (!empty($imagenes))
{
header("Content-Type: ".$imagenes[$id]['tipo']);
echo $imagenes[$id]['imagen'];
}
?>

Esta seria una forma de subir imagenes a nuestra base de datos, cabe mencionar que necesitarian de buen espacio de almacenamiento en su BD asi se evitan futuros problemas por espacio en el mismo  :)

Quedandonos la visualizacion final de la siguiente forma

Acerca de vicram10

Licenciado en Ciencias Informaticas con enfasis a Analisis de Sistemas Informaticos. Egresado de la Facultad Politecnica UNA. Apasionado de la tecnologia y del desarrollo de aplicaciones, desde el 2007 recorriendo por la internet.