My SQL数据库实用技术(36)
mysql_escape_string() 对有问题的字符进行编码是将它们转换为以反斜线开头的2个字符的序列。例如,空字符转换为‘ \ 0’,这里的0 是可打印的ASCII 码0,而不是空。反斜线、单引号和双引号分别转换为‘ \ \’、‘\’’和‘\”’。调用mysql_escape_string() 的过程如下:
dedecms.com
mysql_escape_string() 对from_str 进行编码,并把结果写入to _ str中,还添加了空终结值,这样很方便,因为可以利用像strcpy() 和strlen() 这样的函数使用该结果串。from_str 指向包括将要编码的字符串的char 缓冲区,这个字符串可能包含任何内容,其中包括二进制数据。to_str 指向一个存在的char 缓冲区,在这个缓冲区里,可以写入编码的字符串;不要传递未初始化的指针或NULL 指针,希望由mysql_escape_string() 分配空间。由to_str 指向的缓冲区的长度至少是(from_len*2) 1 个字节(很可能from_str 中的每个字符都需要用2 个字符来编码;额外的字节是空终结值)。
from_len 和to_len 都是unsigned int 值,from_len 表示from_str 中数据的长度;提供这个长度是非常必要的,因为from_str 可能包含空值字节,不能把它当作空终结串。从mysql_escape_string() 返回的to_len 值是作为结果的编码字符串的实际长度,没有对空终结值进行计数。
当mysql_escape_string() 返回时, to _ str中编码的结果就可看作是空终结串,因为from_str 中的空值都被编码为‘ \ 0’。
为了重新编写构造SELECT 的代码,使名称的值即使包含引号也能工作,我们进行下面的操作:
织梦内容管理系统
6.8.3 图像数据的处理
mysql_escape_string() 的基本功能之一就是把图像数据加载到一个表中。本节介绍如何进行这项工作(这个讨论也适用于二进制数据的其他形式)。假设想从文件中读取图像,并将它们连同唯一的标识符存储到表中。BLOB 类型对二进制数据来讲是个很好的选择,因此可以使用下面的表说明:
内容来自dedecms
内容来自dedecms
实际上,要想从文件中获取图像并放入images 表,利用下面的函数load_image() 可以实现,给出一个标识符号码和一个指向包括这个图像数据的打开文件的指针:
织梦内容管理系统
dedecms.com
load_image() 不会分配非常大的查询缓冲区( 1 0 0 K),因此它只能处理相对较小的图形。
在实际的应用程序中,可以根据图形文件的大小动态地分配缓冲区。处理从数据库中恢复的图形数据(或任何二进制数据)并不像开始把它放入时那样问题重重,因为在变量MYSQL_ROW 中数据值的原始形式是有效的,通过调用mysql _ fetch _length ( ),这个长度也是有效的。必须将值看作是计数串,而不是空终结串。
文章评论
共有位Admini5网友发表了评论 查看完整内容