Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Inserir Blobs em bancos de dados MySql com php

Problema

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','file_get_contents($tmp_image)')";

Isso cria uma string em PHP chamada $sql . Esqueça o MySQL por um minuto, porque você ainda não está executando nenhuma consulta. Você está apenas construindo uma string.

A mágica do PHP significa que você pode escrever um nome de variável — digamos, $this->image_iddentro as aspas duplas e a variável ainda é magicamente expandida.

Essa funcionalidade, conhecida como "interpolação variável", não ocorre para chamadas de função. Então, tudo o que você está fazendo aqui é escrever a string "file_get_contents($tmp_image)" no banco de dados.

Solução (1)


Então, para concatenar o resultado da chamada de file_get_contents($tmp_image) , você precisa sair da string e fazer as coisas explicitamente:
$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";

(Você pode ver apenas pela sintaxe destacando como isso funcionou.)

Solução (2)


Agora o problema que você tem é que se os dados binários contiverem algum ' , sua consulta não é válida. Então você deve executá-lo através de mysql_escape_string para higienizá-lo para a operação de consulta:
$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";

Solução (3)


Agora você tem um realmente big string, e seu banco de dados está ficando volumoso.

Prefira não armazenar imagens em bancos de dados , onde você pode ajudá-lo.