This Domain(Admin5.com) is for Sale:

PEAR MDB 数据库抽象层 —— 一次编写—随处运行

时间:2007-12-23  来源:不详  作者:迈克DB


如你能看到的,MDB::createLob() 被传递一个关系数组。Type 键的值可能是以下中的一个:data, inputfile 或者 outputfile。前两个用于你想要把 LOB 写入的时候。假如你有一个储存在变量中的 LOB,你应当在 需要使用 inputfile 时从文件直接读取 LOB。最后,outpufile 应当在你想要从中读取 LOB 时使用。取决于你是否使用数据或者 inputfile 你需要给 Filename 键或者 Data 键指定一个值,像上面的例子那样。现在,我们将把前面的 LOB 储存到中去。

php">$p_query = $mdb->prepareQuery('INSERT INTO files (id, b_data, c_data) VALUES (1, ?, ?)');$mdb->setParamBlob($p_query, 1 , $blob, 'b_data');$mdb->setParamClob($p_query, 2 , $clob, 'c_data');$result = $mdb->executeQuery($p_query); dedecms.com 


为了从中获取上面的文件,我们需要首先从中选择数据并且使用 MDB::createLob() 创建 LOB 对象。这次我们将设置 'Type' 为 'outputfile'

php">$mdb->query('SELECT b_data FROM files WHERE id = 1');$binary_lob = array('Type' => 'outputfile','Result' => $result,'Row' => 0,'Field' => 'b_data','Binary' => 1,'FileName' => './myfile2.gif');$blob = $mdb->createLob($binary_lob); 
织梦内容管理系统


现在我们能够使用 MDB::readLob() 从结果集中读取 LOB。传递长度 0 给 MDB::readLob() 意味着整个 LOB 被读取和储存在我们前面指定的文件中。一旦任务完成了,我们可以把资源释放了。你也可以设置任何大于零的长度并且使用一个 while 循环检查 MDB::endofLob() 来读取 LOB。

php">$mdb->readLob($blob, $data, 0); 

织梦内容管理系统



注重你不要把这个获取函数和 bulk 获取函数像 MDB::fetchAll()搞混了,因为这将在大部分 PHP 扩展中导致问题。在一些时候,MDB 可能能够使用 bulk 获取函数获得 LOB。

如我们在这节所见,MDB 特性本身的原生数据类型集自动映射于中的原生数据类型。这保证了无论我们发送和从接收什么样的数据,它都能与使用的 RDBMS 无关的使用相同的格式。如我在本节开篇已经提到的,这明显需要使用的数据类型是 MDB 预期的。这种需要被用于确保映射所耗费的代价很小。下一节将教给我们 MDB 如何辅助在中使用正确的数据类型。


使用 XML schema 文件

利用在上个段落中描述的特性,你能编写真正的独立的程序。但是 MDB 尝试向前更加迈出一步:它答应你用 XML 定义你的 schema。一个治理器把这种 schema 转换为给每种 RDBMS 的必要的 SQL 语句。这意味着你能对所有支持的 RDBMS 使用相同的 schema。本节的例子能够在 xml_schema 目录中找到。

我们现在将从头编写一个 XML schema 文件。首先,我们必须定义一个 XML 文档。定义是包含在一个 database 标签之中的。的名字是使用 name 标签定义的。create 标签告诉治理器是否需要在它不存在的时候被创建。假如你把你的 schema 文件分割成好几个文件你你首先提交给治理器的那个文件中把 create 设置为 1。 内容来自dedecms

php"><?xml version="1.0" encoding="ISO-8859-1" ?><database><name>auth</name><create>1</create></database>

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息