我读了有关将图像存储在DB中的教程。在教程中,作者在插入之前逃脱了二进制数据中的特殊字符: 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

有帮助吗?

解决方案

您对逃脱的理解是错误的。将插入数据库的数据逃脱,因此查询解析器可以按预期查看信息。

以“ Jean-Luc'Earl Gray'Picard”为例。逃脱结果: 'Jean-Luc \'Earl Grey\' Picard'

当MySQL接收到这一点时,它知道需要从字面上拿走逃脱的行情,这就是逃脱的含义,并将它们存储在数据库中。它不会将逃生字符存储在数据库中。 向MySQL表示它应该从字面上遵循角色。

检索时,将数据显示给您的应用程序,而无需逃避字符,因为在解析查询时将其删除。

其他提示

1)即使对于二进制字段类型(BLOB),我们是否需要逃脱特殊字符?

是的,因为 mysql_real_escape_string() (这确实是要使用的)提供了防止SQL注入攻击的保护,该攻击也很容易在图像文件中。 任何 您提供给数据库的任意数据必须首先进行消毒。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top