因为存入的二进制数据要打入sql语句。所以存入前需要用函数将二进制数据中特殊字符过滤掉。以免数据破坏sql语句。
从mysql中读取数据后没有做任何处理。这样的数据根本不是二进制数据了啊。(0x00、0x1a之类的东西都被过滤掉了)
从网上看到将图片以二进制方式存入数据库。也是这样。
(http://www.anyexample.com/programming/php/php_mysql_example__image_gallery_(blob_storage).xml)问题一:我就不明白了。这样读出的图片应该产生错误啊。(图片也是二进制文件,过滤会破坏它啊)
问题二:php中到底能不能存取mysql中的二进制数据。如果能。如何操作才能保证存入前与读出后的数据一样啊。如果不能保证,存取二进制数据还有什么意义呢?
从mysql中读取数据后没有做任何处理。这样的数据根本不是二进制数据了啊。(0x00、0x1a之类的东西都被过滤掉了)
从网上看到将图片以二进制方式存入数据库。也是这样。
(http://www.anyexample.com/programming/php/php_mysql_example__image_gallery_(blob_storage).xml)问题一:我就不明白了。这样读出的图片应该产生错误啊。(图片也是二进制文件,过滤会破坏它啊)
问题二:php中到底能不能存取mysql中的二进制数据。如果能。如何操作才能保证存入前与读出后的数据一样啊。如果不能保证,存取二进制数据还有什么意义呢?
0x00也是字符串的结束符
不过滤,会将字符串截断。
还有很多其它数值,不要说进入数据库了。连进字符串都不行。
下面是过滤函数
mysqli_real_escape_string
Characters encoded are NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.
stripslashes过滤\\
...
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.
但我没找到相应反转义函数。我自己做过试验:
mysqli_real_escape_string处理
存入数据库
从数据库中读取
存入文件原始数据是exe文件。结果读出的数据少了几百字节。
如果是转义。应该多几百字节啊。
要将255种字符中某些字符转义。最终字符集至少多于255啊。不然转义符就与原字符集中的字符重复了啊。
所以我觉得是过滤掉了。
我运行一下代码试试。
http://www.anyexample.com/programming/php/php_mysql_example__image_gallery_(blob_storage).xml
代码可以保存和读取二进制数据。是我的测试代码有问题。我再回去查一下。
感谢楼上两位大侠!