使用一个表将不同的MIME类型上载到DataBase

时间:2013-10-26 08:54:50

标签: php mysql sql database

我正在开发一个项目,用户将上传几个具有不同MIME类型的文件,我想将文件保存到DataBase(带有InnoDB engeen的Mysql)。 现在这些是我的问题:
1 /我应该为每种MIME类型创建多个表,还是每种类型可能有不同的行? 2 /我在mysql的行类型中测试BLOB用于字段的类型,但似乎DB有问题!!! - - 我试过MEDIUM BLOB和LONG BLOB--
3 /如果我必须将每种MIME类型保存在不同的行或表中,则此类型的哪种类型是正常的:
a / pdf b / jpeg c / png d / gif e / video / mp4 f /应用/字

1 个答案:

答案 0 :(得分:0)

这是我刚刚测试过的一个小例子

表:文件

id(主键,自动增量)

filename(varchar 255)

type(varchar 255)

文件(largeblob)

编码:utf8_unicode_ci

<?php


$hostname = 'localhost';
$username = 'root';
$password = '';

try
{
    $dbh = new PDO("mysql:host=$hostname;dbname=test", $username, $password);
    echo 'Connected to database';
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = $dbh->prepare("INSERT INTO `files` (filename, type, file) VALUES('img.png', 'image/png', :bin)");
    $sql->bindParam("bin", file_get_contents("img.png"));
    $sql->execute();

    $sql = $dbh->prepare("SELECT * FROM `files` WHERE `filename`='img.png'");
    $sql->execute();
    $result = $sql->fetch();

    $file = fopen("new-".$result['filename'], "w+");
    $w = fwrite($file, $result['file']);
    fclose($file);

}
catch(PDOException $e)
{
    echo $e->getMessage();
}
?>

对于你想要做的事情:

  1. 您使用上传的临时文件而不是固定文件。

  2. 您使用该文件的MIME类型(您可以使用php获取)

  3. 当您需要读取文件时,您只需读取BLOB字段并使用文件名作为名称将其写入文件。

  4. 我没有注意到BLOB字段有任何问题。如果您无法解决该问题,可以使用TEXT字段并将base64_encode(文件)存储到该字段中。