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

使用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)的值,那么屏幕上会有大量数据。但是这个值并没有存储在数据库中,这就是我所面临的问题。


陪伴而非守候
浏览 982回答 3
3回答

喵喵时光机

问题$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)现在你有一个非常大的字符串,你的数据库变得笨重。不希望将图像存储在数据库中,您可以在其中提供帮助。

缥缈止盈

要扩展Tomalak的注释,您不能在引号内运行函数。尝试:$sql = "INSERT INTO ImageStore(ImageId,Image)                        VALUES('{$this->image_id}','".file_get_contents($tmp_image)."')";

慕田峪4524236

试试这个:$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);
打开App,查看更多内容
随时随地看视频慕课网APP