Está en la página 1de 6

Manejo de datos BLOB con PHP y

MySQL
Autor: MySQL Hispano
1 . Creando la base de datos
2 . Agregando archivos a la base de datos
3 . Listando los archivos de la base de datos
4 . Descargando archivos de la base de datos
. Co!entarios "inales
Cedido por MySQL Hispano.
Sin d#da alg#na$ #na de las preg#ntas !%s "rec#entes en relaci&n a MySQL es$ '(C&!o
p#edo al!acenar archivos en #na base de datos)'. La resp#esta es$ se tienen *#e #sar los
tipos de datos +L,+. -stos +L,+s .+inary Large ,b/ects0 p#eden al!acenar
pr%ctica!ente c#al*#ier tipo de datos$ incl#yendo doc#!entos de MS 1ord$ i!agenes
gi"2/peg$ archivos 3D4$ M33s$ etc.
-n este art5c#lo va!os a !ostrar co!o crear #n repositorio de archivos binarios #sando
3H3 y MySQL para poder al!acenar di"erentes tipos de archivos. 6ere!os co!o
al!acenar cada #no de los archivos en #na base de datos$ para posterior!ente
rec#perarlos.
3ara probar los e/e!plos en este art5c#lo$ es necesario tener acceso a #n servidor con
soporte para 3H3$ ade!%s de contar con #n servidor MySQL. Se as#!e *#e se c#entan
con los privilegios apropiados para crear la base de datos$ y *#e MySQL est% corriendo
en el !is!o servidor *#e 3H3.
Creando la base de datos
7#estro repositorio de doc#!entos #sar% #na base de datos *#e contenga 8nica!ente
#na tabla para al!acenar dichos doc#!entos.
[eduardo@casita]$ mysqladmin create repositorio
[eduardo@casita]$
[eduardo@casita]$ mysql repositorio
Welcome to the MySQL monitor. Commands end with ; or !.
"our MySQL connection id is #$% to ser&er &ersion' $.($.)#
*ype +help;+ or +h+ ,or help. *ype +c+ to clear the -u,,er.
mysql. C/01*0 *12L0 archi&os3
4. id int not null auto5increment primary 6ey7
4. nom-re &archar389:7
4. titulo &archar389:7
4. contenido medium-lo-7
4. tipo &archar389::;
Query ;<7 9 rows a,,ected 39.9# sec:
mysql. !rant all on repositorio.= to -in!o@localhost identi,ied -y
+holahola+
Query ;<7 9 rows a,,ected 39.)> sec:
Ahora tene!os #na base de datos lla!ada repositorio$ la c#al contiene #na tabla lla!ada
archi&os.
Los detalles de cada ca!po en la tabla archivos se !#estra a contin#aci&n9
id : ;n n8!ero entero *#e nos proporcionar% #n identi"icador 8nico para cada
archivo *#e ire!os al!acenando. <ste se ir% incre!entando a#to!%tica!ente
cada ve= *#e se vaya agregando #n n#evo registro.
nombre : -l no!bre original del archivo$ por e/e!plo$ "oto.gi"$ c#rric#l#!.doc$
etc
titulo : ;na breve descripci&n de cada archivo *#e se ir% g#ardando en la tabla$
por e/e!plo 'Cartita para !i novia'$ o 'La "oto de !i perro'. -ste t5t#lo ser%
#sado posterior!ente al estar revisando los archivos de n#estro repositorio a
trav>s de #na p%gina ?eb.
contenido : ;n ca!po de tipo binario .blob0 para g#ardar el contenido de cada
archivo. -n n#estra tabla he!os #sado #n tipo !edi#!blob$ el c#%l p#ede
al!acenar archivos hasta de 1@M+.
tipo : Co!o vere!os !%s adelante$ cada archivo .ya sea #n .doc$ .gi"$ .pd"$ etc0
tiene #n tipo 8nico. C#ando se env5a #n archivo hac5a el servidor ?eb a trav>s de
#na p%gina ?eb$ el navegador le env5a al servidor la in"or!aci&n acerca del tipo
del archivo$ o bien$ del tipo de contenido del archivo. Los tipos de contenido son
si!ples cadenas. -l tipo de contenido para #n archivo MS 1ord es
'application2!s?ord'$ el tipo de contenido para #na i!agen AB4 es 'i!age2gi"'$
etc.
Agregando archios a la base de datos
Ahora *#e tene!os lista la base de datos *#e servir% co!o repositorio de n#estros
archivos$ va!os a crear #n si!ple p%gina ?eb *#e per!ita seleccionar #n archivo desde
el navegador para posterior!ente enviarlo a #n script en 3H3 *#e se va a encargar de
al!acenarlo en n#estra base de datos. La p%gina ?eb ser% no!brada
escogerCarchivo.ht!l y el script en 3H3 se lla!ar% g#ardarCarchivo.php.
La p%gina ?eb p#ede contener todo el c&digo HDML *#e se desee$ pero es necesario
*#e se incl#ya el sig#iente "or!#lario para *#e se tenga la opci&n de escoger #n archivo
y enviarlo al servidor.
?,orm enctype@AmultipartB,orm4dataA action@A!uardar5archi&o.phpA
method@ApostA.
CescripciDn ?input type@AteEtA name@AtituloA siFe@A$9A.
G-icaciDn ?input type@A,ileA name@Aarchi&itoA.
?input type@Asu-mitA &alue@A0n&iar archi&oA.
?B,orm.
Del c&digo *#e he!os escrito tene!os *#e s#brayar lo sig#iente9
-l "or!#lario necesita #n atrib#to enctype con #n valor multipartB,orm4
data.
-l !>todo de env5o tiene *#e ser 3,SD.
Se tiene *#e #sar por lo !enos #n ca!po del tipo ,ile
-stos son los tres re*#eri!ientos b%sicos *#e debe c#!plir la p%gina HDML *#e servir%
para s#bir los archivos al servidor. Antes de escribir el c&digo del script
!uarda5archi&o.php$ va!os a co!entar algo acerca de la "or!a en co!o se to!aran
los datos del archivo *#e se va a recibir.
Desde la versi&n 4.1 de 3H3 se reco!ienda se #tilice el arreglo $5HIL0S para leer los
datos del archivo *#e se est% s#biendo al servidor. A contin#aci&n se listan los
ele!entos *#e contiene este arreglo. 7&tese *#e el no!bre de los 5ndices del arreglo
depende de co!o se haya no!brado el ca!po del tipo "ile en el "or!#lario.
!"#$L%S&'archiito'(&'name'(
-s el no!bre original del archivo.
!"#$L%S&'archiito'(&'type'(
-l tipo MBM- del archivo$.. i!age2gi"$ application2pd"$ application2!s?ord$.. etc
!"#$L%S&'archiito'(&'si)e'(
-l ta!aEo del archivo en bytes.
!"#$L%S&'archiito'(&'tmp"name'(
La #bicaci&n del archivo te!poral *#e se crea c#ando se s#be #n archivo al
servidor. -s en esta variable de donde se leen los datos del archivo en s5. Si estos
datos no son copiados o !ovidos a otro l#gar$ o en n#estro caso$ al!acenados en
#na base de datos$ se p#eden perder$ ya *#e 3H3 eli!ina este archivo desp#>s de
#n deter!inado tie!po.
3or e/e!plo$ estos son los posibles valores para #n archivo /:odbc.=ip *#e se ha s#bido
al servidor9
$5HIL0S[Aarchi&itoA][name] @. J4Jd-c.Fip
$5HIL0S[Aarchi&itoA][type] @. applicationBFip
$5HIL0S[Aarchi&itoA][tmp5name] @. BtmpBphp&KQpqL
$5HIL0S[Aarchi&itoA][siFe] @. $$M%)8
Cabe !encionar *#e se tienen *#e revisar$ y en s# caso !odi"icar las sig#ientes
variables del archivo de con"ig#raci&n de 3H3 para *#e se p#edan s#bir los archivos al
servidor$ y p#edan ser correcta!ente !ane/ados por #n script de 3H3.
*ile"uploads : Le dice a 3H3 si se p#eden$ & no$ s#bir archivos al servidor. -sta
variable debe tener el valor ',n'.
upload"ma+"*ilesi)e : Le indica a 3H3 c#%l es el ta!aEo !%Fi!o del archivo
*#e se p#ede aceptar. Se p#ede #tili=ar el s#"i/o 'M' para indicar el valor en
Mega+ytes$ por e/e!plo$ con #n valor 2M se acepta #n archivo !%Fi!o de 2
Mega+ytes.
upload"tmp"dir : -s el directorio en el *#e se copia te!poral!ente el
contenido del archivo c#ando se s#be al servidor.
Ahora es el !o!ento de !ostrar el c&digo del script en 3H3 *#e va a g#ardar el archivo
en n#estra base de datos.
B= !uardar5archi&o.php =B
require3Ad-connect.inc.phpA:;
$archi&o @ $5HIL0S[Aarchi&itoA][Atmp5nameA];
$tamanio @ $5HIL0S[Aarchi&itoA][AsiFeA];
$tipo @ $5HIL0S[Aarchi&itoA][AtypeA];
$nom-re @ $5HIL0S[Aarchi&itoA][AnameA];
$titulo @ $5L;S*[AtituloA];
i, 3 $archi&o N@ AnoneA :
O
$,p @ ,open3$archi&o7 Ar-A:;
$contenido @ ,read3$,p7 $tamanio:;
$contenido @ addslashes3$contenido:;
,close3$,p:;
$qry @ AIPS0/* IP*; archi&os Q1LG0S
397+$nom-re+7+$titulo+7+$contenido+7+$tipo+:A;
mysql5query3$qry:;
i,3mysql5a,,ected5rows3$conn: . 9:
print ASe ha !uardado el archi&o en la -ase de datos.A;
else
print AP; se ha podido !uardar el archi&o en la -ase de
datos.A;
R
else
print APo se ha podido su-ir el archi&o al ser&idorA;
-l archivo dbconnect.inc.php contiene 8nica!ente las instr#cciones para conectarse a
MySQL y seleccionar la base de datos *#e se va a #tili=ar. -l c&digo de este progra!ita
se !#estra a contin#aci&n.
B= d-connect.inc.php =B
$conn @ mysql5connect3AlocalhostA7A-in!oA7AholaholaA:;
mysql5select5d-3ArepositorioA:;
Listando los archios de la base de datos
Ga *#e he!os g#ardado alg#nos archivos en n#estro repositorio$ ahora pode!os listar
la in"or!aci&n de >stos$ para posterior!ente descargarlos. -sta es la labor del script *#e
se !#estra a contin#aci&n.
B= listar5archi&os.php =B
require3Ad-connect.inc.phpA:;
$qry @ AS0L0C* id7 nom-re7 titulo7 tipo H/;M archi&osA;
$res @ mysql5query3$qry:;
while3$,ila @ mysql5,etch5array3$res::
O
print A$,ila[titulo]
?-r.
$,ila[nom-re] 3$,ila[tipo]:
?-r.
?a hre,@+descar!ar5archi&o.phpSid@$,ila[id]+.Cescar!ar?Ba.
?-r.
?-r.A;
R
,escargando archios de la base de datos
Co!o se p#ede observar en el c&digo del listado anterior$ se ha p#esto #na liga a #n
archivo descargarCarchivo.php. La "#ncionalidad de este progra!ita ser% la de leer los
datos de los archivos *#e se enc#entran en la base de datos y !andarlos al navegador.
Dependiendo del tipo de archivo del c#%l se trate$ el navegador podr% !ostrar por >l
!is!o el contenido del archivo.
B= Script descar!ar5archi&o.php =B
require3Ad-connect.inc.phpA:;
$qry @ AS0L0C* tipo7 contenido H/;M archi&os WT0/0 id@$idA;
$res @ mysql5query3$qry:;
$tipo @ mysql5result3$res7 97 AtipoA:;
$contenido @ mysql5result3$res7 97 AcontenidoA:;
header3AContent4type' $tipoA:;
print $contenido;
Comentarios *inales
Co!o se p#ede observar$ el c&digo 3H3 de los progra!itas es de!asiado si!ple$ y no
tienen ning8n grado de di"ic#ltad. -l c&digo se ha hecho a prop&sito lo !%s si!ple
posible$ sin e!bargo p#ede adec#arse o to!arse co!o base para reali=ar #na aplicaci&n
real !%s co!pleta.

-ltimos comentarios
-ltimos . comentarios
Problema a mistrar imagenes /00123142256
3or A#stavo Dabares
Hola$ p#eden ay#dar!e ya s#bo las i!agenes a la +D y si las cons#lto individ#al!ente
las p#edo ver sin proble!as. -l proble!a es c#ando trato de !eterlas dentro de #na
celda en ht!l para centrarla !e !#estra #na cantidad de codigo raro y la i!agen por
ning#n lado. por "avor ay#da
imagenes blob /07128142256
3or Hordi
Hola a!igos$
he escrito el c&digo para poder vis#ali=ar i!%genes gravadas en la base de datos$ de tipo
!edi#!blob$ y al !ostrarlas solo se ven caracteres i bits$ no se vis#ali=a correcta!ente
la i!agen $ ade!%s tengo el header content :type co!o /peg$
alg#na idea ))
M#chas gracias
manipulacion de imagenes mys9l y :net /28128142256
3or eliso"t
tengo #na base de datos !ys*l *#e contiene !iles de i!agenes$ co!o p#edo cargar y
!ostralas en #n "or!#lario de .net ya sea con cI o vb
S$ #;<C$O<A /05124142256
3or MAJBA M-DB7A
Si "#nciona !#y bien el codigo todo esta !#y bien M;CHAS AJACBAS g#sto lo *#e
b#scaba bonito y sencillo
descargar con $% /2=124142256
3or te"y
Hola$ a !i el codigo !e anda ... pero t#ve *#e disting#ir entre B- y los de!as
eFploradores .. alg#ien sabe co!o hacerlo sin tener * hacer esto)$ ade!as desde B- !e
pone co!o no!bre del archivo 'descargarCarchivo' y no el no!bre * tiene ... co!o
hago) este es !i codigo9
Kres#lt L *#ery.K*ry$Kconn0M
Ktipo L res#lt.Kres#lt$ N$ 'tipoarchivo'0M
Kcontenido L res#lt.Kres#lt$ N$ 'archivo'0M
Kno!breL res#lt.Kres#lt$ N$ 'no!brearchivo'0M
22header.'Content:type9 application2octet:strea!'0M
header.'Content:type9 Ktipo'0M
i".eregi.'MSB-'$KCS-J6-JO'HDD3C;S-JCAA-7D'P00
header.'Content:Disposition9attach!entM "ilena!eL QR.Kno!bre.QR'0M
else
header.'Content:Disposition9attach!entM "ilena!eL Q'Kno!breQ''0M
print .'Kcontenido'0M
ade!%s por e/e!pli si descargo #n pd" desde B- !e lo abre en al ventana del B- y no en
el acrobat
espero !e p#edan ay#dar S
sal#dos

También podría gustarte