使用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)
现在你有一个非常大的字符串,你的数据库变得笨重。
不希望将图像存储在数据库中,您可以在其中提供帮助。
缥缈止盈
TA贡献2041条经验 获得超4个赞
要扩展Tomalak的注释,您不能在引号内运行函数。
尝试:
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('{$this->image_id}','".file_get_contents($tmp_image)."')";
慕田峪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);
添加回答
举报
0/150
提交
取消