为了账号安全,请及时绑定邮箱和手机立即绑定

使用php在MySql数据库中插入Blob

使用php在MySql数据库中插入Blob

陪伴而非守候 2019-07-30 17:32:07
使用php在MySql数据库中插入Blob我试图将图像存储在DataBase中,由于某种原因它似乎不起作用。这是我桌子的结构。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)的值,那么屏幕上会有大量数据。但是这个值并没有存储在数据库中,这就是我所面临的问题。
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

问题

$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)

因此,要连接调用的结果file_get_contents($tmp_image),您必须跳出字符串并明确地执行操作:

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";

(你甚至可以从语法中看到它突出显示它是如何工作的。)


解决方案(2)

现在您遇到的问题是,如果二进制数据包含任何二进制数据',则查询无效。因此,您应该运行它mysql_escape_string以对查询操作进行清理:

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";

解决方案(3)

现在你有一个非常大的字符串,你的数据库变得笨重。

不希望将图像存储在数据库中,您可以其中提供帮助。


查看完整回答
反对 回复 2019-07-30
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

要扩展Tomalak的注释,您不能在引号内运行函数。

尝试:

$sql = "INSERT INTO ImageStore(ImageId,Image)               
        VALUES('{$this->image_id}','".file_get_contents($tmp_image)."')";


查看完整回答
反对 回复 2019-07-30
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

试试这个:

$tmp_img = $this->image['tmp_name'];$sql = "INSERT INTO ImageStore(ImageId,Image)               
  VALUES('$this->image_id','" . addslashes(file_get_contents($tmp_image)) . "')";mysql_query($sql);


查看完整回答
反对 回复 2019-07-30
  • 3 回答
  • 0 关注
  • 980 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信