PEAR MDB 数据库抽象层 —— 一次编写—随处运行
时间:2007-12-23 来源:不详 作者:迈克DB
为了作个演示,让我们假定我仅仅想要获取第一行。MDB::queryRow() 获得第一行,它释放结果集并且返回其内容,因而它正是我们所要的。
php">$result = $mdb->queryRow($query);织梦好,好织梦
但是不同的 RDBMS 返回像日期这样的数据时用的格式是不同的。因此,假如我们然后要对一些数据进行计算,不管选择的 RDBMS 是什么,把数据以相同的格式返回是重要的。这个可以由 MDB 半自动地完成。你所有需要做的是告诉你的结果列将是什么样的类型,MDB将处理转换的工作。最简单的办法是把这样的信息传递给查询函数。
php">$types = array('timestamp', 'integer');$result = $mdb->queryRow($query, $types); 内容来自dedecms
这告诉 MDB 结果集的第一列类型是 'timestamp' 以及第二列是'integer'。所有查询函数能够接受这样的元信息作为可选的参数。数据还能事后用 MDB::setResultTypes() 来设置。取决于数据获取于的,它然后将被相应的转换返回的数据。MDB 内部的 timestamps 的数据格式是遵循 ISO 8601 标准的。其他像 PEAR::Date 这样的包能够处理这种格式。MDB 还在 MDB_Date 类中提供了一些数据格式转换函数,它们能够被可选的包含。
因为相当多的 RDBMS 以相同的方法返回整数数据,没有必要转换整数数据。因而,为了获得稍许的性能改进你能够这么做:
php">$types = array('timestamp');$result = $mdb->queryRow($query, $types); dedecms.com
这样只有结果集的第一列会被转换。当然,假如 MDB 用于返回整数不同的,这可能成为一个问题。然而,稍许的性能改善可能并不值得冒这个风险。但是再一次的,它显示了这些特性的使用仅仅是供选择的。
Listing 1 展示了一个使用预预备的查询的例子。假如你必须运行大量查询而唯一的差别是数据传递给,但是查询的结构还是一样的,这些能够相当的方便。高级的能够在内存中储存解析好的查询来加速性能。
Listing 1
php">$alldata = array(array(1, 'one', 'un'),array(2, 'two', 'deux'),array(3, 'three', 'trois'),array(4, 'four', 'quatre'));$p_query = $mdb->prepareQuery('INSERT INTO numbers VALUES (?,?,?)');$param_types = array('integer', 'text', 'text');foreach ($alldata as $row) {$mdb->execute($p_query, NULL, $row, $param_types);}本文来自织梦
在 $alldata 中储存的所有四个数组将用于 execute 语句。数据将自动被转换为正确的格式。因为这是一个插入语句,MDB::execute() 的第二个参数被设置为 NULL 因为我们将没有任何结果列需要我们设置数据类型。
在支持的数据类型中还有 LOB (大对象),它使得我们能够在中储存文件。二进制文件储存在 BLOB (二进制大对象)中而且普通文本文件储存在 CLOB (字符大对象)中。在 MDB 中你仅仅能够使用预预备的 INSERT 和 UPDATE 查询储存 LOB。使用 MDBA::setParamBlob() 或者 MDB::setParamClob() 你能够设置预预备查询的 LOB 域的值。两个函数都预期传递一个 LOB 对象,而它能够使用 MDB::createLob() 创建。
php">$binary_lob = array('Type' => 'inputfile','FileName' => './myfile.gif');$blob = $mdb->createLob($binary_lob);$character_lob = array('Type' => 'data','Data' => 'this would be a very long string container the CLOB data');$clob = $mdb->createLob($character_lob);
上一篇:Access数据库升迁SQLServer 下一篇:.htaccess文件使用手册
文章评论
共有位Admini5网友发表了评论 查看完整内容