MySQL - Gravando Imagens em uma tabela
Colaboração: Ronie Ramos de Oliveira
Data de Publicação: 02 de Outubro de 2009
PERGUNTA: Eu gostaria de saber se minha base de dados ficaria muito grande se eu fizesse o upload de imagens e as gravasse em uma tabela de um banco de dados MySQL. Seriam muitas fotos, para um site de festas. Eu já tenho um sistema de upload, para gravar em disco, mas eu gostaria de saber se é mais produtivo fazer a gravação direto no banco de dados, usando PHP. (Gabriel)
RESPOSTA, por Ronie ramos de Oliveira
Crie provisoriamente um diretório com as imagens (/images) e armazene no banco de dados a URL ou o caminho. Posteriormente, em uma aplicação faça a chamada da imagem selecionando a URL ou o caminho do banco de dados.
Usando php seria algo mais ou menos assim:
$nome_banner="path da imagem/r1-day.png"
$db = mysql_connect("localhost", $DB, $senha)
$inserir_dado = "INSERT INTO tabela_imagem
(banner_img)
VALUES ('$nome_banner')";
mysql_query($insert_data)
Armazenamento de imagens em bancos de dados consome bastante espaço e a definição de tipos BLOB (Binary Large Object), por exemplo, levam a esse consumo de espaço. Acredito que se você armazenar as imagens em um diretório de imagens e depois armazenar no BD só o endereço das url's das referidas imagens, ficaria mais em conta de se trabalhar. Por outro lado nada impede que você armazene as referidas imagens em tabelas no seu BD, o que consumiria também espaço para armazena-las...
Veja também o artigo Blob fields in MySQL Databases, de autoria de Paulino Michelazzo.
Este artigo foi extraído do sistema Rau-Tu de Perguntas e Respostas sobre Bancos de Dados Livres, mantido pelo Centro de Computação da Unicamp.
Veja a relação completa dos artigos da Bancos de Dados Livres
Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS
Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.
Opinião dos Leitores
19 Mar 2010, 16:04
Por exemplo tenho 05 imagens iniciais no meu diretório. Cadastro todas manualmente no BD.
Qdo incluo a sexta eu tenho que cadastra manualmente tb.? Ou tem rotina para fazer isto?
09 Jan 2010, 21:53
dm_stoking.ado_qry_insere.sql.clear;
dm_stoking.ado_qry_insere.sql.add('insert into vendedor');
dm_stoking.ado_qry_insere.sql.add('(vendedor,');
dm_stoking.ado_qry_insere.sql.add('endereco,');
dm_stoking.ado_qry_insere.sql.add('bairro,');
dm_stoking.ado_qry_insere.sql.add('cidade,');
dm_stoking.ado_qry_insere.sql.add('cep,');
dm_stoking.ado_qry_insere.sql.add('uf,');
dm_stoking.ado_qry_insere.sql.add('senha,');
dm_stoking.ado_qry_insere.sql.add('tel_res,');
dm_stoking.ado_qry_insere.sql.add('cpf,');
dm_stoking.ado_qry_insere.sql.add('rg,');
dm_stoking.ado_qry_insere.sql.add('data,');
dm_stoking.ado_qry_insere.sql.add('nascimento,');
dm_stoking.ado_qry_insere.sql.add('e_mail,');
dm_stoking.ado_qry_insere.sql.add('perfil,');
dm_stoking.ado_qry_insere.sql.add('ven_ou_fun,');
dm_stoking.ado_qry_insere.sql.add('percentual,');
dm_stoking.ado_qry_insere.sql.add('salario,');
dm_stoking.ado_qry_insere.sql.add('nro_carteira_trabalho,');
dm_stoking.ado_qry_insere.sql.add('nro_carteira_motorista,');
dm_stoking.ado_qry_insere.sql.add('foto)');
dm_stoking.ado_qry_insere.sql.add('values');
dm_stoking.ado_qry_insere.sql.add('(:vp01,');
dm_stoking.ado_qry_insere.sql.add(':vp02,');
dm_stoking.ado_qry_insere.sql.add(':vp03,');
dm_stoking.ado_qry_insere.sql.add(':vp04,');
dm_stoking.ado_qry_insere.sql.add(':vp05,');
dm_stoking.ado_qry_insere.sql.add(':vp06,');
dm_stoking.ado_qry_insere.sql.add(':vp07,');
dm_stoking.ado_qry_insere.sql.add(':vp08,');
dm_stoking.ado_qry_insere.sql.add(':vp09,');
dm_stoking.ado_qry_insere.sql.add(':vp10,');
dm_stoking.ado_qry_insere.sql.add(':vp11,');
dm_stoking.ado_qry_insere.sql.add(':vp12,');
dm_stoking.ado_qry_insere.sql.add(':vp13,');
dm_stoking.ado_qry_insere.sql.add(':vp14,');
dm_stoking.ado_qry_insere.sql.add(':vp15,');
dm_stoking.ado_qry_insere.sql.add(':vp16,');
dm_stoking.ado_qry_insere.sql.add(':vp17,');
dm_stoking.ado_qry_insere.sql.add(':vp18,');
dm_stoking.ado_qry_insere.sql.add(':vp19,');
dm_stoking.ado_qry_insere.sql.add(':vp20)');
dm_stoking.ado_qry_insere.parameters[00].value := edt_vendedor.text;
dm_stoking.ado_qry_insere.parameters[01].value := edt_endereco.text;
dm_stoking.ado_qry_insere.parameters[02].value := edt_bairro.text;
dm_stoking.ado_qry_insere.parameters[03].value := edt_cidade.text;
dm_stoking.ado_qry_insere.parameters[04].value := edt_cep.text;
dm_stoking.ado_qry_insere.parameters[05].value := lsb_uf.Items[lsb_uf.ItemIndex];
dm_stoking.ado_qry_insere.parameters[06].value := edt_senha_frente_de_loja.text;
dm_stoking.ado_qry_insere.parameters[07].value := edt_tel_res.text;
dm_stoking.ado_qry_insere.parameters[08].value := msk_cpf.text;
dm_stoking.ado_qry_insere.parameters[09].value := edt_rg.text;
if (edt_data_cadastro.text = ' / / ') or (edt_data_cadastro.text = '') then
begin
dm_stoking.ado_qry_insere.parameters[10].value := date();
end
else
begin
dm_stoking.ado_qry_insere.parameters[10].value := strtodate(edt_data_cadastro.text);
end;
if (edt_data_nascimento.text = ' / / ') or (edt_data_nascimento.text = '') then
begin
dm_stoking.ado_qry_insere.parameters[11].value := date();
end
else
begin
dm_stoking.ado_qry_insere.parameters[11].value := strtodate(edt_data_nascimento.text);
end;
dm_stoking.ado_qry_insere.parameters[12].value := edt_email.text;
dm_stoking.ado_qry_insere.parameters[13].value := lsb_perfil.items[lsb_perfil.itemindex];
dm_stoking.ado_qry_insere.parameters[14].value := lsb_categoria.items[lsb_categoria.itemindex];
dm_stoking.ado_qry_insere.parameters[15].value := strtofloat(xed_percentual.Text);
dm_stoking.ado_qry_insere.parameters[16].value := strtofloat(xnu_salario.Text);
dm_stoking.ado_qry_insere.parameters[17].value := edt_nro_ctps.text;
dm_stoking.ado_qry_insere.parameters[18].value := edt_nro_cnh.text;
dm_stoking.ado_qry_insere.parameters[19].value := img_foto.picture.PictureAdapter; //Aqui está o parametro
dm_stoking.ado_qry_insere.execsql;


