当需要在 MySQL 数据库中存储图像时,可能会遇到困难。表结构如下:
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)
以下查询尝试插入图像,但无法存储预期的二进制数据:
$tmp_img = $this->image['tmp_name']; $sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','file_get_contents($tmp_image)')"; mysql_query($sql);
问题在于函数的串联在字符串内调用 file_get_contents($tmp_image) 。 PHP 的变量插值仅适用于变量,不适用于函数调用。以下是三种解决方案:
解决方案 1: 使用显式串联:
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
解决方案 2: 清理 MySQL 查询的二进制数据:
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
注意:如果可能的话,最好不要将大图像存储在 MySQL 数据库中。
以上是如何使用 PHP 正确地将图像 Blob 插入 MySQL?的详细内容。更多信息请关注PHP中文网其他相关文章!