【问题标题】:Converting files to blob to save in database将文件转换为 blob 以保存在数据库中
【发布时间】:2012-09-17 23:30:26
【问题描述】:

我有一个我们目前正在更新的旧用户网站。该站点的用户之前上传了存储在目录中的个人资料图片。我现在想将这些个人资料图像保存在数据库中,(易于备份所有数据)但无法弄清楚如何去做。

有很多教程都在谈论从刚刚上传的文件中执行此操作并使用 tmp 名称等,但是如何使用已经上传的文件重新创建?

我已经调查过了 $data = file_get_contents($filename); 这似乎创建了一个二进制文件,但似乎没有保存在数据库中:

mysql_query("UPDATE profiles SET company_logo = mysql_real_escape_string('".$data."') WHERE id = 1 ") or die(mysql_error());

*更新* 因此,在进一步研究之后,我想我会选择大多数人并将图像保存为它们已经存在的样子......在文件夹中......

【问题讨论】:

  • 请不要那样做。文件系统是一个很棒的文件数据库。
  • 你真的不应该在数据库中存储文件。文件应该保留在文件系统中是有充分理由的。看看this question

标签: php mysql blob


【解决方案1】:

将图像存储在数据库中通常是个坏主意。

最好将图像存储在文件中,并在字段或表格中保留引用。

但是,如果要存储它们,则必须将它们存储为 BLOB(Binairy Large OBject)。在 BLOB 字段上,不进行字符转换。当您存储它们时,您必须将它们完全存储为文件内容。所以删除mysql_real_escape string,因为它会弄乱你的二进制数据。

【讨论】:

  • 为什么将图像存储在数据库中是个坏主意?我知道加载时间可能会稍慢...
  • 很难不对数据库图像存储发起战争 :) 看看这个讨论:stackoverflow.com/questions/3748/…
  • 删除 mysql_real_escape_string 可能很危险。想想如果你在文件中确实有类似'); drop table x; 的东西会发生什么?更好的方法是使用准备好的语句,然后使用 blob 数据执行它们。这样,数据库服务器/驱动程序将自行处理任何必要的转换。
  • 对于 blob 存储,您必须删除 mysql_real_escape_string,否则二进制数据将(可能)混乱,具体取决于内容。我同意,如果您存储二进制数据,则应始终使用参数绑定。
猜你喜欢
  • 2018-11-12
  • 2015-06-19
  • 1970-01-01
  • 2012-04-28
  • 2018-05-24
  • 2013-09-09
  • 2016-11-04
  • 1970-01-01
  • 2011-02-14
相关资源
最近更新 更多