Lorsqu'ils tentent de stocker des images dans une base de données MySQL, certains utilisateurs peuvent rencontrer un problème où l'image est pas correctement inséré. Cette divergence peut survenir en raison d'un malentendu sur la façon dont PHP gère les appels de fonction dans les chaînes interpolées.
Dans le code suivant, l'intention est de stocker les données d'image binaire dans la base de données :
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','file_get_contents($tmp_image)')";
Cependant, cette approche crée une chaîne contenant "file_get_contents($tmp_image)" plutôt que l'image réelle data.
Pour résoudre ce problème, l'appel de fonction doit être explicitement concaténé dans la chaîne :
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
Maintenant, les données de l'image sont correctement interpolé dans la chaîne avant d'exécuter la requête.
Les données de l'image binaire peuvent contenir des caractères spéciaux, tels que des guillemets simples, qui peuvent invalider la requête SQL. Pour atténuer cela, les données doivent être échappées avant l'interpolation :
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
Il est important de noter que le stockage de grandes quantités de données d'image dans une base de données peut s'avérer inefficace. . Envisagez des options de stockage alternatives, telles que le stockage des chemins d'accès aux images dans la base de données et des images réelles dans un système de fichiers dédié ou un réseau de diffusion de contenu (CDN).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!