php -mysql:存储图像在DB中 - 逃脱特殊字符
-
14-10-2019 - |
题
我读了有关将图像存储在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注入攻击的保护,该攻击也很容易在图像文件中。 任何 您提供给数据库的任意数据必须首先进行消毒。