gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-29 00:01:52 25 4
gpt4 key购买 nike

我正在尝试将图像存储在数据库中,但由于某种原因它似乎不起作用。这是我的表的结构。

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

最佳答案

问题

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

现在你有一个真的很大的字符串,而且你的数据库变得越来越庞大。

Prefer not storing images in databases ,您可以在哪里提供帮助。

关于php - 使用 php 在 MySql 数据库中插入 Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7052655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com