如何使用PHP从MySQL数据库存储和检索图像?

时间:2009-10-28 12:13:37

标签: php mysql database blob

如何在MySQL中插入图像然后使用PHP检索它?

我在这两个领域的经验都很有限,我可以用一些代码让我开始搞清楚这一点。

6 个答案:

答案 0 :(得分:121)

首先创建一个MySQL表来存储图像,例如:

create table testblob (
    image_id        tinyint(3)  not null default '0',
    image_type      varchar(25) not null default '',
    image           blob        not null,
    image_size      varchar(25) not null default '',
    image_ctgy      varchar(25) not null default '',
    image_name      varchar(50) not null default ''
);

然后您可以将图像写入数据库,如:

/***
 * All of the below MySQL_ commands can be easily
 * translated to MySQLi_ with the additions as commented
 ***/ 
$imgData = file_get_contents($filename);
$size = getimagesize($filename);
mysql_connect("localhost", "$username", "$password");
mysql_select_db ("$dbname");
// mysqli 
// $link = mysqli_connect("localhost", $username, $password,$dbname); 
$sql = sprintf("INSERT INTO testblob
    (image_type, image, image_size, image_name)
    VALUES
    ('%s', '%s', '%d', '%s')",
    /***
     * For all mysqli_ functions below, the syntax is:
     * mysqli_whartever($link, $functionContents); 
     ***/
    mysql_real_escape_string($size['mime']),
    mysql_real_escape_string($imgData),
    $size[3],
    mysql_real_escape_string($_FILES['userfile']['name'])
    );
mysql_query($sql);

您可以使用以下网址在网页中显示数据库中的图像:

$link = mysql_connect("localhost", "username", "password");
mysql_select_db("testblob");
$sql = "SELECT image FROM testblob WHERE image_id=0";
$result = mysql_query("$sql");
header("Content-type: image/jpeg");
echo mysql_result($result, 0);
mysql_close($link);

答案 1 :(得分:22)

不是将图像存储在数据库中,而是将它们存储在磁盘的文件夹中,并将它们的位置存储在数据库中。

答案 2 :(得分:9)

请注意,提供来自数据库的图像通常比从磁盘提供图像要快得多

您会启动PHP过程中,打开一个DB连接,具有DB从同一盘和RAM,用于高速缓存作为文件系统将读取的图像数据,经几个插座和缓冲液,然后通过PHP,推出传送它,其默认情况下,它使其不可缓存,并增加了分块HTTP编码的开销。

OTOH现代的web服务器可以成为只有少数优化的内核调用(内存映射文件,并传递给TCP堆栈内存区)影像,因此他们甚至不围绕复制内存很少几乎没有开销。

能够在一台机器上并行提供20或2000张图像是不同的。

所以不要这样做,除非你绝对需要事务完整性(实际上甚至只需要在数据库和文件系统清理例程中使用图像元数据),并且知道如何改进PHP对HTTP的处理适合图像。

答案 3 :(得分:6)

我还建议考虑这个,然后选择将图像存储在文件系统而不是数据库中。 见这里:Storing Images in DB - Yea or Nay?

答案 4 :(得分:6)

我的意见是,不建议将图像直接存储到数据库中,而是建议将图像位置存储在数据库中。当我们比较两个选项时,在数据库中存储图像对于安全目的是安全的。缺点是

  1. 如果数据库已损坏,则无法检索。

  2. 与其他选项相比,从db检索图像文件的速度很慢。

  3. 另一方面,在db中存储图像文件位置将具有以下优点。

    1. 检索起来很容易。

    2. 如果存储了多个图像,我们可以轻松检索图像信息。

答案 5 :(得分:4)

我个人不会将图像存储在数据库中,而是将其放在不能从外部访问的文件夹中,并使用数据库来跟踪其位置。保持数据库大小,你可以使用PHP包含它。没有PHP就没有办法访问那个图像