This Domain(Admin5.com) is for Sale:

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

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

$query = 'select createtime, user_id from sessions';
$query .= ' where session = '.$mdb->gettextvalue($session);
$query .= ' and lastaccess < '.$mdb->gettimestampvalue($timeout);
为了作个演示,让我们假定我仅仅想要获取第一行。mdb::queryrow() 获得第一行,它释放结果集并且返回其内容,因而它正是我们所要的。 $result = $mdb->queryrow($query);
但是不同的 rdbms 返回像日期这样的数据时用的格式是不同的。因此,假如我们然后要对一些数据进行计算,不管选择的 rdbms 是什么,把数据以相同的格式返回是重要的。这个可以由 mdb 半自动地完成。你所有需要做的是告诉你的结果列将是什么样的类型,mdb将处理转换的工作。最简单的办法是把这样的信息传递给查询函数。 $types = array('timestamp', 'integer');
$result = $mdb->queryrow($query, $types);
这告诉 mdb 结果集的第一列类型是 'timestamp' 以及第二列是'integer'。所有查询函数能够接受这样的元信息作为可选的参数。数据还能事后用 mdb::setresulttypes() 来设置。取决于数据获取于的,它然后将被相应的转换返回的数据。mdb 内部的 timestamps 的数据格式是遵循 iso 8601 标准的。其他像 pear::date 这样的包能够处理这种格式。mdb 还在 mdb_date 类中提供了一些数据格式转换函数,它们能够被可选的包含。 因为相当多的 rdbms 以相同的方法返回整数数据,没有必要转换整数数据。因而,为了获得稍许的性能改进你能够这么做: $types = array('timestamp');

内容来自dedecms


$result = $mdb->queryrow($query, $types);
这样只有结果集的第一列会被转换。当然,假如 mdb 用于返回整数不同的,这可能成为一个问题。然而,稍许的性能改善可能并不值得冒这个风险。但是再一次的,它显示了这些特性的使用仅仅是供选择的。 listing 1 展示了一个使用预预备的查询的例子。假如你必须运行大量查询而唯一的差别是数据传递给,但是查询的结构还是一样的,这些能够相当的方便。高级的能够在内存中储存解析好的查询来加速性能。 listing 1 $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() 创建。 $binary_lob = array(

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

文章评论

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

24小时热门信息