2011-10-01 34 views
4

将数据指定为二进制的整个观点是将二进制序列简单地视为未经处理的原始字节序列。为什么不能从php脚本中存储和检索任何任意的二进制数据流,而无需使用mysql_real_escape_string或addslashes来跳过序列?为什么不能从php脚本中存储和检索任何任意二进制数据流,而无需使用mysql_real_escape_string或addslashes ?为什么在将数据存储到MySQL数据库时,需要将转义序列添加到二进制字符串中?

+1

是否SQL注入不可能与二进制数据? – sdleihssirhc

+0

任何人都可以解释大规模upvoting?关于这个问题有什么棘手的问题,没有被基本的SQL理解所涵盖? –

回答

6

因为二进制数据仍然被序列化为一个字符串......所以,例如,假设您的$binary_data的值为a 'b" c。然后查询INSERT INTO foo VALUES $binary_data将失败。

+0

这可能是真的,但是使用TEXT或BLOB字段的方法恰恰是错误的,那就是准备好的语句的用途 – IanNorton

+0

这完全正确。但是,如果我错了,请纠正我的错误,但没有必要为准备好的语句转义参数。 –

+0

您不需要在准备好的语句中手动转义参数,请更正。 – IanNorton

3

将数据指定为二进制的全部观点是将二进制序列简单地视为未经处理的原始字节序列。

你错了。
将数据指定为二进制的唯一要点就是将其标记为不是字符集重新编码的主题。就这样。

为什么不能从php脚本中存储和检索任何任意二进制数据流,而无需使用mysql_real_escape_string或addslashes转义序列?

谁说这是不可能的?
这是很有可能的,既存储和检索。
整点编写语句是直接向mysql发送任意二进制流。

为什么在将数据存储到MySQL数据库时,需要将转义序列添加到二进制字符串中?

如果您正在谈论SQL,您必须先了解它是什么。
SQL是一种编程语言。
而任何语言都有自己的语法。
如果您打算将原始二进制数据添加到此程序中,则必须使此数据满足这些规则。这是逃避的。

相关问题