php - 使用一张表将不同的 MIME 类型上传到数据库

标签 php mysql sql database

我正在开发一个项目,用户将上传多个具有不同 MIME 类型的文件,我想将这些文件保存到数据库(带有 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/应用程序/单词

最佳答案

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

表:文件

id(主键,自增)

文件名(varchar 255)

类型(varchar 255)

文件(大 Blob )

编码: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 字段并将其写入使用文件名作为名称的文件中。

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

关于php - 使用一张表将不同的 MIME 类型上传到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19604795/

相关文章:

php - 如何向 opencart 管理添加新模块?

php - MySQL 平均每 4 行

mysql - 从注释字段中有选择地选择日期

MySQL 加入最大日期 where 子句

php - SQL - 查询失败*除非*字符串被分解成数字和字母然后连接起来

PHP mysql 函数总是在更新查询时返回 false

php - Paypal 快速支付错误 SetExpressCheckout 失败 : Could not resolve host: api-3t(6)

php - CodeIgniter 如何将变量从 View 传递到 Controller

php - MySQL选择不同的行

python - 如何在 MySQL Insert 语句中使用 python 变量,出现元组错误,请提出建议