Lorsqu'il faut stocker une image dans une base de données MySQL, on peut rencontrer des difficultés. Voici la structure de la table :
mysql> describe ImageStore; +---------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+----------+------+-----+---------+-------+ | ImageId | int(11) | NO | PRI | NULL | | | Image | longblob | NO | | NULL | | +---------+----------+------+-----+---------+-------+ 2 rows in set (0.01 sec)
La requête suivante tente d'insérer une image, mais ne parvient pas à stocker les données binaires attendues :
$tmp_img = $this->image['tmp_name']; $sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','file_get_contents($tmp_image)')"; mysql_query($sql);
Le problème réside dans la concaténation de la fonction appelez file_get_contents($tmp_image) à l'intérieur de la chaîne. L'interpolation de variables PHP ne fonctionne que pour les variables, pas pour les appels de fonction. Voici trois solutions :
Solution 1 : Utiliser la concaténation explicite :
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
Solution 2 : Nettoyer les données binaires pour la requête MySQL :
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
Remarque : Je préfère ne pas stocker de grandes images dans MySQL bases de données si possible.
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!