...Primeramente un saludo a todos.
Se que este post en el foro ya tiene hace un buen, pero recientemente me encargaron hacer un sitio web con PHP y base de datos MSSQL y se necesitaba almacenar imagenes en una tabla en la BD sin encontrar una solucion viable

, aunque afortunadamente vine a dar aqui, tuve que extender mi investigacion hasta libros de PHP/MSSQL tomando en cuenta que antes no programaba en PHP y ahora que si, este ejemplo se lleva a cabo con la version
"PHP 5.2.2" y
MSSQL 2000, para esto encontre ciertas configuraciones previas que hay que tomar en cuenta para que esto funcione, asi que si mas preambulos ay les va la receta:
primeramente creamos la tabla en la base de datos, el nombre que gusten los campos que gusten, y para este ejemplo vamos a manejar 4 campos para almacenar las imagenes:
[foto] [text] ,
[foto_nombre] [varchar] (100) ,
[foto_kb] [varchar] (20) ,
[foto_tipo] [varchar] (20)
En donde el campo
foto, es un campo de texto normal, alli es donde vamos a guardar la imagen, los demas campos contendran la informacion de la imagen.
despues... antes de empezar a programar cualquier cosa en PHP, tenemos que tomar en cuenta 2 cosas importantes que deben estar configuradas en el archivo de PHP.INI:
la primera, tener activadas las extensiones de mssql
extension=php_mssql.dll
y la segunda, como vamos a manejar imagenes las cuales vamos a convertir a texto binario largo, tenemos que tener activada esta opcion para que PHP nos permita hacerlo, esto es en las 2 siguientes lineas:
; Valid range 0 - 2147483647. Default = 4096.
mssql.textlimit = 2147483647
; Valid range 0 - 2147483647. Default = 4096.
mssql.textsize = 2147483647
aqui lo que hacemos es poner al maximo el rango valido para que PHP pueda manejar en un GET o POST la informacion que vamos a mandar a la base de datos.
ahora si... a programar.
vamos a hacerlo en 2 pasos, el upload y el download, en el upload, primeramente creamos un formulario con estas caracteristicas:
<form method="POST" enctype="multipart/form-data" action="inserta_imagen.php">
<input type="file" name="foto_a_subir" id="foto_a_subir" size="50">
<input type="submit" value=" Aceptar " name="aceptar">
</form>
despues creamos el archivo inserta_imagen.php, en donde la informacion que vamos a obtener la vamos a manejar asi:
$Imagen = $_FILES['foto_a_subir']['tmp_name'];
$FotoNombre = $_FILES['foto_a_subir']['name'];
$FotoTipo = $_FILES['foto_a_subir']['type'];
$FotoKb = $_FILES['foto_a_subir']['size'];
$Fotografia = base64_encode(addslashes(fread(fopen($Imagen, "r"), filesize($Imagen))));
las primeras 4 lineas es donde php obtiene la informacion de la imagen, primeramente la imagen, luego el nombre, tipo de archivo y la ultima linea es en donde esta el secreto de este asunto, lo que hacemos es convertir la imagen a codigo binario codificado a 64, incluyendo los slashes. esta informacion se va a guardar directamente asi tal cual, en el campo
foto de la base de datos. hacemos el INSERT INTO y listo...
$Query = "INSERT INTO fotografias(id_foto, foto, foto_nombre, foto_kb, foto_tipo) VALUES(" . $Fotografia . "','" . $FotoNombre . "','" . $FotoKb . "','" . $FotoTipo . "')";
luego, para poder visualizar la imagen, es muy sencillo, simplemente tomamos la misma informacion en un SELECT, pero para esto tenemos que volver a convertir el codigo binario de 64, para eso hacemos lo siguiente, anteriormente solicitamos extraer la informacion de tipo de imagen, esto para posteriormente poder manipular el contenido a imprimir en pantalla:
$Query_fotos = mssql_query("SELECT foto,foto_nombre,foto_tipo,foto_kb FROM $Tabla WHERE $LaCondicion=$ID");
$rs_fotos = mssql_fetch_array($Query_fotos);
header("Content-type: " . $rs_fotos["foto_tipo"]);
print stripslashes(base64_decode($rs_fotos["foto"]));
aqui primeramente hacemos nuestro SELECT, traemos la info y lo ponemos en un array, luego, mandamos cambiar el
header de la pagina, indicando el tipo de contenido el cual solicitamos cuando subimos la imagen, luego, convertimos el codigo binario con la funcion
base64_encode y listo.
y asi es como consegui subir fotos o archivos a mi base de datos con PHP y MSSQL, sigan los pasos tal cual como se los puse aqui, y no van a tener ningun problema.
felices teclazos... hasta pronto.
