PHP-Mysql:在DB中存储图像-转义特殊字符

PHP-Mysql:在DB中存储图像-转义特殊字符,php,mysql,security,binary-data,mysql-real-escape-string,Php,Mysql,Security,Binary Data,Mysql Real Escape String,我阅读了关于在DB中存储图像的教程。在本教程中,作者在插入之前转义二进制数据中的特殊字符:(使用addslashes虽然mysql\u real\u escape\u string更可取,但这是另一个问题) 关键是,在显示时,他只显示存储的数据: 我的问题是: 1) 即使对于二进制字段类型(blob),也需要转义特殊字符吗 2) 如果是这样,那么,我们是否不需要再次“取消显示”字符以正确显示图像?(如果是的话,最好的方法是什么。对效率有什么评论吗?对于大型图像:逃逸和逃避可能是一个很大的开销?)

我阅读了关于在DB中存储图像的教程。在本教程中,作者在插入之前转义二进制数据中的特殊字符:(使用
addslashes
虽然
mysql\u real\u escape\u string
更可取,但这是另一个问题)

关键是,在显示时,他只显示存储的数据:

我的问题是:

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

2) 如果是这样,那么,我们是否不需要再次“取消显示”字符以正确显示图像?(如果是的话,最好的方法是什么。对效率有什么评论吗?对于大型图像:逃逸和逃避可能是一个很大的开销?)

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

谢谢

太平绅士

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


是的,因为
mysql\u real\u escape\u string()
(确实是要使用的)提供了针对SQL注入攻击的保护,而SQL注入攻击也很容易位于图像文件中。必须首先对输入数据库的任意数据进行清理。

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

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

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


检索时,数据将显示给您的应用程序,而不带转义字符,因为它们在解析查询时会被删除。

谢谢Pekka。我想我们需要在展示之前先把画面换掉?对效率有什么想法吗?正是因为这个escape unescape,我才重新考虑是否将我的图像缩略图存储在数据库中。@JP19有关讨论,请参阅