PHP MYSQL 文件内容转义问题

发布于 2024-08-13 13:43:29 字数 206 浏览 10 评论 0原文

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

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

我使用过addslashes、mysql_real_escape_string、removeslashes 等。

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

非常感谢,

I am attempting to upload a .pdf file into a mysql database using php.

It is all good except for the contents of the file. No matter how I seem try to escape special characters, the query always fails, mostly with "Unknown Command \n".

I have used addslashes, mysql_real_escape_string, removeslashes etc.

Does anyone have any ideas on how to escape file contents?

Many Thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

许久 2024-08-20 13:43:29

我不明白为什么你想将文件存储在数据库中,但我建议你看看 准备好的声明

I don't see why you would want to store a file in a database, but I suggest you take a look at prepared statements.

甚是思念 2024-08-20 13:43:29

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

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

首先,将数据转换为 Base64 编码的字符串,

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

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


检索数据;

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

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

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

这当然帮助我存储了我需要存储的内容在 mySQL 数据库中!

I've used the following sequence before, which seems to work nicely, and will store any data into the db, including images, pdfs, arrays of data, etc... :)

Storing the data (can be a string, array, object, etc.);

First, turn the data into a base64 encoded string

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

Then store that string data in the db...


Retrieving the data;

Extract the string data from the db

decode the data back to what you want (you may need to perform an extra step after this depending on the input data, array, image, etc.)

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

This certainly helped me to store what I needed to store in a mySQL db!

暮年 2024-08-20 13:43:29

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

Guess: You may be encountering errors due to the incompatibility between character sets. PDF is probably a binary file so you need to make sure that db column is set up to handle it that.

计㈡愣 2024-08-20 13:43:29

除了转义问题之外,如果(MySQL)系统变量max_allowed_pa​​cket 设置为“小”值。
使用 mysqli 扩展、准备好的语句和 mysqli_stmt::send_long_data 你可以避免这两个问题。

Beside the escaping problem you might run into "packet too large" errors if the (MySQL) system variable max_allowed_packet is set to a "small" value.
Using the mysqli extension, prepared statements and mysqli_stmt::send_long_data you can avoid both problems.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文