【问题标题】:PHP MYSQL file contents escape problemPHP MYSQL 文件内容转义问题
【发布时间】:2009-12-07 18:30:33
【问题描述】:

我正在尝试使用 php 将 .pdf 文件上传到 mysql 数据库中。

除了文件的内容,一切都很好。无论我如何尝试转义特殊字符,查询总是失败,主要是“未知命令\n”。

我用过addslashes、mysql_real_escape_string、removeslashes等

有人对如何转义文件内容有任何想法吗?

非常感谢,

【问题讨论】:

  • 我认为您必须为此显示代码和 SQL。

标签: php mysql file-upload mysql-real-escape-string


【解决方案1】:

我不明白您为什么要将文件存储在数据库中,但我建议您看看prepared statements

【讨论】:

  • 效果很好,非常感谢。我将它存储在数据库中有几个原因,无法执行,数据库压缩,数据库备份会备份文件等,不确定这些是否是刚开始使用 mysql 时的有效点。非常感谢
  • “无法执行”、“数据库压缩”、“数据库备份对文件进行备份”。这些中的每一个都可以通过文件系统中的存储来实现。也许当您达到“50% 的应用程序正在运行”阶段时,您可能希望花时间将二进制文件移动到文件系统存储中。
  • 确实如此,我想到的是,哪个更好?在数据库中,它有一个备份脚本、不同的服务器、镜像等等。当然,就最容易设置而言,此选项更易于部署?虽然不确定性能。尽管我猜互联网将成为大多数人的瓶颈。将文件存储在数据库中是否有任何负面影响?
  • 没错,性能将是数据库解决方案的另一个缺点。
【解决方案2】:

我之前使用过以下序列,它似乎工作得很好,并将任何数据存储到数据库中,包括图像、pdf、数据数组等...:)

存储数据(可以是字符串、数组、对象等);

首先,将数据转成base64编码的字符串

$strData = strtr(
             base64_encode(
               addslashes(
                 gzcompress( serialize($dataToStore) , 9)
                 )
               ) , '+/=', '-_,');

然后将该字符串数据存储在数据库中...


检索数据;

从数据库中提取字符串数据

将数据解码回您想要的(根据输入数据、数组、图像等,您可能需要在此之后执行额外的步骤)

$returnData = unserialize(
                gzuncompress(
                  stripslashes(
                    base64_decode(
                      strtr($strDataFromDb, '-_,', '+/=')
                    )
                  )
                )
              );

这无疑帮助我将需要存储的内容存储在 mySQL 数据库中!

【讨论】:

  • 为了清楚起见... [阅读以上内容后,我意识到我喝了太多酒 :)] 您要存储上述数据的 db 字段可以只是一个普通的文本字段,base64 编码将输出转换为标准文本字符。我不确定我到底在哪里找到了这段代码,所以我不能完全相信它,但它完全符合我的要求......
  • 我结合使用了这种技术和准备好的语句技术,创造了奇迹并解决了我的所有问题!非常感谢!
【解决方案3】:

猜测:由于字符集之间的不兼容,您可能会遇到错误。 PDF 可能是一个二进制文件,因此您需要确保设置了 db 列来处理它。

【讨论】:

  • 是的,我尝试过 blob、大/大 blob 和二进制。逃避它似乎是个问题。
【解决方案4】:

如果 (MySQL) 系统变量 max_allowed_packet 设置为“小”值,除了转义问题之外,您可能会遇到“数据包太大”错误。
使用 mysqli 扩展、prepared statements 和mysqli_stmt::send_long_data 可以避免这两个问题。

【讨论】:

  • 我将不得不对此进行调查,希望由于它仅限于小文件,因此不应该发生这种情况。我总是可以将它设置为更大的数据包。
猜你喜欢
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 2016-12-20
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多