sql >> Base de Datos >  >> RDS >> Mysql

Insertar Blobs en bases de datos MySql con php

Problema

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

Esto crea una cadena en PHP llamada $sql . Olvídese de MySQL por un minuto, porque aún no está ejecutando ninguna consulta. Solo estás construyendo una cadena.

La magia de PHP significa que puedes escribir un nombre de variable, por ejemplo, $this->image_iddentro las comillas dobles y la variable aún se expanden mágicamente.

Esta funcionalidad, conocida como "interpolación de variables", no se aplica a las llamadas a funciones. Entonces, todo lo que estás haciendo aquí es escribir la cadena "file_get_contents($tmp_image)" en la base de datos.

Solución (1)

Entonces, para concatenar el resultado de llamar a file_get_contents($tmp_image) , tienes que saltar de la cadena y hacer las cosas explícitamente:

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

(Puede ver incluso desde la sintaxis resaltando cómo ha funcionado).

Solución (2)

Ahora el problema que tienes es que si los datos binarios contienen cualquier ' , su consulta no es válida. Entonces deberías ejecutarlo a través de mysql_escape_string para desinfectarlo para la operación de consulta:

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

Solución (3)

Ahora tienes un realmente cadena grande, y su base de datos se está volviendo voluminosa.

Prefiero no almacenar imágenes en bases de datos , donde puedes ayudarlo.