我试图将图像存储在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)
Run Code Online (Sandbox Code Playgroud)
这是我的查询插入图像或至少这应该是什么:
//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);
Run Code Online (Sandbox Code Playgroud)
如果我打印file_get_contents($ tmp_image)的值,那么屏幕上会有大量数据.但是这个值并没有存储在数据库中,这就是我所面临的问题.
Lig*_*ica 44
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','file_get_contents($tmp_image)')";
Run Code Online (Sandbox Code Playgroud)
这将在PHP中创建一个名为的字符串$sql.忘记MySQL一分钟,因为你还没有执行任何查询.你只是在构建一个字符串.
PHP的神奇之处在于你可以在双引号内写一个变量名 - 比方说$this->image_id- 变量仍然可以神奇地扩展.
函数调用不会发生此功能,称为"变量插值".所以,你在这里所做的就是将字符串"file_get_contents($tmp_image)"写入数据库.
因此,要连接调用的结果file_get_contents($tmp_image),您必须跳出字符串并明确地执行操作:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
Run Code Online (Sandbox Code Playgroud)
(你甚至可以从语法中看到它突出显示它是如何工作的.)
现在您遇到的问题是,如果二进制数据包含任何二进制数据',则查询无效.因此,您应该运行它mysql_escape_string以对查询操作进行清理:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
Run Code Online (Sandbox Code Playgroud)
现在你有一个非常大的字符串,你的数据库变得笨重.
不希望将图像存储在数据库中,您可以在其中提供帮助.