你的位置:
问答吧
-> PHP基础
-> 问题详情
php中如何存取mysql中的二进制数据
因为存入的二进制数据要打入sql语句。所以存入前需要用函数将二进制数据中特殊字符过滤掉。以免数据破坏sql语句。
从mysql中读取数据后没有做任何处理。这样的数据根本不是二进制数据了啊。(0x00、0x1a之类的东西都被过滤掉了)
从网上看到将图片以二进制方式存入数据库。也是这样。
(http://www.anyexample.com/programming/php/php_mysql_example__image_gallery_(blob_storage).xml)
问题一:我就不明白了。这样读出的图片应该产生错误啊。(图片也是二进制文件,过滤会破坏它啊)
问题二:php中到底能不能存取mysql中的二进制数据。如果能。如何操作才能保证存入前与读出后的数据一样啊。如果不能保证,存取二进制数据还有什么意义呢?
作者: yl0002
发布时间: 2010-09-19
存入前需要用函数将二进制数据中特殊字符过滤掉 ???
如果过滤掉了,还能保持完整性吗?
只需将内容中的 “'”加上转义符“\”,即转变成“\'”
作者: xuzuning
发布时间: 2010-09-19
引用 1 楼 xuzuning 的回复:
存入前需要用函数将二进制数据中特殊字符过滤掉 ???
如果过滤掉了,还能保持完整性吗?
只需将内容中的 “'”加上转义符“\”,即转变成“\'”
二进制中会有0x00
0x00也是字符串的结束符
不过滤,会将字符串截断。
还有很多其它数值,不要说进入数据库了。连进字符串都不行。
下面是过滤函数
mysqli_real_escape_string
Characters encoded are NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.
stripslashes过滤\\
...
作者: yl0002
发布时间: 2010-09-19
应该是“转义”,而不是“滤掉”!
通过“转义”,可以在字符串中表达任何字符。
--------
With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea. It is
hard to be sure where they are going to land, and it could be dangerous sitting under them as they
fly overhead.
出自 RFC1925 - The Twelve Networking Truths
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
作者: maquan
发布时间: 2010-09-19
引用 3 楼 maquan 的回复:
应该是“转义”,而不是“滤掉”!
通过“转义”,可以在字符串中表达任何字符。
--------
With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea. It is
hard to be sure where they are going to land, an……
如果是转义。php应该提供相应的反转义函数。
但我没找到相应反转义函数。
我自己做过试验:
mysqli_real_escape_string处理
存入数据库
从数据库中读取
存入文件
原始数据是exe文件。结果读出的数据少了几百字节。
如果是转义。应该多几百字节啊。
要将255种字符中某些字符转义。最终字符集至少多于255啊。不然转义符就与原字符集中的字符重复了啊。
所以我觉得是过滤掉了。
作者: yl0002
发布时间: 2010-09-19