Mysql
 sql >> Base de données >  >> RDS >> Mysql

Insérer des Blobs dans les bases de données MySql avec php

Problème

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

Cela crée une chaîne en PHP nommée $sql . Oubliez MySQL pendant une minute, car vous n'exécutez pas encore de requête. Vous construisez juste une chaîne.

La magie de PHP signifie que vous pouvez écrire un nom de variable — disons, $this->image_idà l'intérieur les guillemets doubles et la variable sont toujours étendues comme par magie.

Cette fonctionnalité, connue sous le nom d'"interpolation variable", n'existe pas pour les appels de fonction. Donc, tout ce que vous faites ici est d'écrire la chaîne "file_get_contents($tmp_image)" dans la base de données.

Solution (1)

Donc, pour concaténer le résultat de l'appel de file_get_contents($tmp_image) , vous devez sortir de la chaîne et faire les choses explicitement :

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

(Vous pouvez voir même juste à partir de la syntaxe mettant en évidence comment cela a fonctionné.)

Solution (2)

Maintenant, le problème que vous avez est que si les données binaires contiennent un ' , votre requête n'est pas valide. Vous devez donc l'exécuter via mysql_escape_string pour le nettoyer pour l'opération de requête :

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

Solution (3)

Maintenant, vous avez un vraiment grosse chaîne, et votre base de données devient volumineuse.

Préférer ne pas stocker images dans les bases de données , où vous pouvez l'aider.