5

我阅读了有关在数据库中存储图像的教程。在教程中,作者在插入之前对二进制数据中的特殊字符进行了转义:http ://www.phpriot.com/articles/images-in-mysql/7 (addslashes虽然mysql_real_escape_string最好使用 - 但这是另一个问题)。

关键是,在显示时,他只显示存储的数据:http ://www.phpriot.com/articles/images-in-mysql/8

我的问题:

1) 即使对于二进制字段类型 ( ),我们是否也需要转义特殊字符blob

2)如果是这样,那么我们是否不需要再次“取消转义”字符才能正确显示图像?(如果是这样,最好的方法是什么。关于效率的任何评论?对于大图像:转义和取消转义可能是一个很大的开销?)。

还是我对转义的理解完全错误(转义只影响查询,而不影响插入/存储的最终数据?)。

谢谢

J.P

4

2 回答 2

6

你对逃避的理解是错误的。插入数据库的数据被转义,以便查询解析器按预期看到信息。

以字符串“Jean-Luc 'Earl Grey' Picard”为例。转义导致:'Jean-Luc \'Earl Grey\' Picard'

当 MySQL 收到这个时,它知道转义的引号需要按字面意思理解,这就是转义的意思,并将它们存储在数据库中。它不会将转义字符存储在数据库中。\ 向 MySQL 表明它应该接受它后面的字符。

检索时,数据会在没有转义字符的情况下呈现给您的应用程序,因为它们在解析查询时会被删除。

于 2010-12-31T11:31:09.450 回答
2

1)即使对于二进制字段类型(blob),我们是否也需要转义特殊字符?

是的,因为mysql_real_escape_string()(这确实是要使用的)提供了针对 SQL 注入攻击的保护,这种攻击也很容易出现在图像文件中。您输入数据库的任何任意数据都必须首先进行清理。

于 2010-12-31T11:27:43.550 回答