Pergunta

Como posso inserir uma imagem no MySQL e depois recuperá-lo usando PHP?

Eu tenho pouca experiência em qualquer área, e eu poderia usar um pouco de código para me pegar começou em descobrir isso.

Foi útil?

Solução

Primeiro você cria uma tabela MySQL para armazenar imagens, como por exemplo:

create table testblob (
    image_id        tinyint(3)  not null default '0',
    image_type      varchar(25) not null default '',
    image           blob        not null,
    image_size      varchar(25) not null default '',
    image_ctgy      varchar(25) not null default '',
    image_name      varchar(50) not null default ''
);

Em seguida, você pode escrever uma imagem para o banco de dados como:

/***
 * All of the below MySQL_ commands can be easily
 * translated to MySQLi_ with the additions as commented
 ***/ 
$imgData = file_get_contents($filename);
$size = getimagesize($filename);
mysql_connect("localhost", "$username", "$password");
mysql_select_db ("$dbname");
// mysqli 
// $link = mysqli_connect("localhost", $username, $password,$dbname); 
$sql = sprintf("INSERT INTO testblob
    (image_type, image, image_size, image_name)
    VALUES
    ('%s', '%s', '%d', '%s')",
    /***
     * For all mysqli_ functions below, the syntax is:
     * mysqli_whartever($link, $functionContents); 
     ***/
    mysql_real_escape_string($size['mime']),
    mysql_real_escape_string($imgData),
    $size[3],
    mysql_real_escape_string($_FILES['userfile']['name'])
    );
mysql_query($sql);

Você pode exibir uma imagem do banco de dados em uma página da web com:

$link = mysql_connect("localhost", "username", "password");
mysql_select_db("testblob");
$sql = "SELECT image FROM testblob WHERE image_id=0";
$result = mysql_query("$sql");
header("Content-type: image/jpeg");
echo mysql_result($result, 0);
mysql_close($link);

Outras dicas

Em vez de armazenar imagens na loja de banco de dados em uma pasta em seu disco e armazenar sua localização em sua base de dados.

Tenha em atenção que servem imagens de DB é geralmente muito, muito muito mais lento do que servi-los a partir do disco.

Você vai estar começando um processo PHP, abrindo uma conexão DB, tendo a DB lê dados de imagem a partir do mesmo disco e memória RAM para cache como sistema de arquivos seria, transferindo-o sobre alguns soquetes e tampões e em seguida, empurrando para fora através de PHP, que por padrão o torna não-cacheable e adiciona sobrecarga de Chunked HTTP codificação.

OTOH modernos servidores web pode servir imagens com apenas algumas chamadas de kernel otimizado (arquivo de memória mapeada e que área de memória passou a pilha TCP), de modo que eles não até copiar a memória ao redor e não há quase nenhuma sobrecarga.

Essa é uma diferença entre ser capaz de servir 20 ou 2000 imagens em paralelo em uma máquina.

Portanto, não fazê-lo , a menos que absolutamente necessário integridade transacional (e, na verdade, mesmo que pode ser feito com metadados apenas imagens no banco de dados e rotinas de limpeza do sistema de arquivos) e saber como melhorar a movimentação do PHP de HTTP para ser adequado para imagens.

Eu também recomendo pensando que isso thru e, em seguida, escolhendo para armazenar imagens em seu sistema de arquivos em vez do DB .. veja aqui: armazenar imagens em DB - sim ou não

A minha opinião é, em vez de armazenar imagens diretamente para o banco de dados, é recomendado para armazenar a localização da imagem no banco de dados. Ao comparar as duas opções, o armazenamento de imagens no banco de dados é seguro para fins de segurança. Desvantagem são

  1. Se banco de dados está corrompido, não há maneira de recuperar.

  2. Recuperação de arquivos de imagem de db é lento quando comparado a outra opção.

Por outro lado, o armazenamento local do arquivo de imagem em db terá as seguintes vantagens.

  1. É fácil de recuperar.

  2. Se mais de um imagens são armazenadas, podemos facilmente recuperar as informações da imagem.

Pessoalmente eu não iria armazenar a imagem no banco de dados, Em vez colocá-lo em uma pasta não acessível a partir do exterior, e usar o banco de dados para manter o controle de sua localização. mantém o tamanho do banco de dados para baixo e você pode simplesmente incluí-lo usando PHP. Não haveria nenhuma maneira sem o PHP para acessar a imagem, em seguida,

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top