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_id
— dentro 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.