Problème :
Tentative de stocker une image dans une base de données MySQL, mais l'insertion échoue. La table de base de données comporte deux colonnes : ImageId (int) et Image (longblob). Le code PHP utilise file_get_contents() pour récupérer les données de l'image et les insère dans la colonne Image à l'aide de la requête SQL suivante :
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','file_get_contents($tmp_image)')";
Cependant, les données de l'image ne sont pas stockées dans la base de données.
Solution :
Le problème réside dans la manière dont le code PHP construit la requête SQL. L'appel de fonction file_get_contents() est inclus entre guillemets simples dans la chaîne de requête, ce qui signifie que les données d'image réelles ne sont pas insérées. Pour résoudre ce problème, la fonctionnalité d'interpolation de variables de PHP doit être utilisée :
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
De plus, pour garantir que les données binaires ne contiennent aucun caractère susceptible d'interrompre la requête SQL, il est recommandé de nettoyer les données en utilisant la fonction mysql_escape_string() :
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . mysql_real_escape_string(file_get_contents($tmp_image)) . "')";
Supplémentaire Considérations :
Le stockage de données binaires volumineuses dans des bases de données peut entraîner des problèmes de performances. Pensez à utiliser un support de stockage distinct, tel qu'un système de fichiers ou un service de stockage cloud, pour les images et autres objets volumineux.
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!