开发者社区> 问答> 正文

用PHP在MySql数据库中插入Blob

我试图将图像存储在数据库中,由于某种原因,它似乎无法正常工作。这是我桌子的结构。

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) 这是我的查询,它插入图像或至少多数民众赞成在什么:

//Store the binary image into the database $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)的值,那么屏幕上会有大量数据。但是,此值不会存储在数据库中,这就是我面临的问题。

展开
收起
保持可爱mmm 2020-05-10 21:48:17 477 0
1 条回答
写回答
取消 提交回答
  • 问题 $sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','file_get_contents($tmp_image)')"; 这会在PHP中创建一个名为的字符串$sql。暂时不要使用MySQL,因为您尚未执行任何查询。您只是在构建一个字符串。

    比如说, - PHP的手段,你可以写一个变量名的魔术$this->image_id- 内部双引号和可变仍然被奇迹般地扩大。

    此功能称为“变量插值”,不会在函数调用中出现。因此,您在这里要做的就是将字符串"file_get_contents($tmp_image)"写入数据库。

    解决方案(1) 因此,要连接call的结果file_get_contents($tmp_image),您必须跳出字符串并明确地执行操作:

    $sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')"; (您甚至可以仅从语法中看到它的工作原理。)

    解决方案(2) 现在的问题是,如果二进制数据包含any ',则查询无效。因此,您应该运行它mysql_escape_string以对查询操作进行清理:

    $sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')"; 解决方案(3) 现在你有一个真正的大串,和你的数据库越来越庞大。

    最好不要将图像存储在数据库中,您可以在其中提供帮助。来源:stack overflow

    2020-05-10 21:48:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像