ZendChina | Zend中文权威资讯's Archiver

ZendChina 发表于 2007-12-30 20:39

Zend Framework中对oracle数据库操作总结

[b]1.执行查询并返回结果[/b]
1.1 使用 Zend_Db_Adapter
        一旦你得到了一个Zend_Db_Adapter 实例,你可以直接执行sql语句进行查询。Zend_Db_Adapter 传送这些sql语句到底层的PDO对象,由PDO对象组合并执行他们,在有查询结果的情况下,返回一个PDOStatement对象以便对结果进行处理。
[php]
<?php
// 创建一个$db对象,然后查询数据库// 使用完整的sql语句直接进行查询.
$sql = $db->quoteInto(    'SELECT * FROM example WHERE date > ?',    '2006-01-01');
$result = $db->query($sql);

// 使用PDOStatement对象$result将所有结果数据放到一个数组中
$rows = $result->fetchAll();
?>[/php]

或者使用fetch开头系列方法获得结果集:
对于每一种 fetch系列的方法来说,你需要传送一个select的sql语句;假如你在操作语句中使用指定的占位符,你也可以传送一个绑定数据的数组对你的操作语句进行处理和替换。Fetch系列的方法包括:
fetchAll()
fetchAssoc()
fetchCol()
fetchOne()
fetchPairs()
fetchRow()

[php]<?php
// 创建一个 $db对象, 然后...
// 取回结果集中所有字段的值,作为连续数组返回
$result = $db->fetchAll(    "SELECT * FROM round_table WHERE noble_title = :title",    array('title' => 'Sir'));

// 取回结果集中所有字段的值,作为关联数组返回
// 第一个字段作为码
$result = $db->fetchAssoc(    "SELECT * FROM round_table WHERE noble_title = :title",    array('title' => 'Sir'));

// 取回所有结果行的第一个字段名
$result = $db->fetchCol(    "SELECT first_name FROM round_table WHERE noble_title = :title",    array('title' => 'Sir'));

// 只取回第一个字段值
$result = $db->fetchOne(    "SELECT COUNT(*) FROM round_table WHERE noble_title = :title",    array('title' => 'Sir'));

// 取回一个相关数组,第一个字段值为码
// 第二个字段为值
$result = $db->fetchPairs(    "SELECT first_name, favorite_color FROM round_table WHERE noble_title = :title",    array('title' => 'Sir'));

// 只取回结果集的第一行
$result = $db->fetchRow(    "SELECT * FROM round_table WHERE first_name = :name",    array('name' => 'Lancelot'));
?>[/php]

1.2 使用Zend_Db_Select方法
       使用Zend_Db_Select方法是一种不受数据库约束构建select的sql语句的工具 (ares注:用户可以使用该方法生成查询的sql语句,而不需要考虑各种数据 库sql语句的差别)。虽然该方法明显还不完善,但是的确为我们提供一种方 法,帮助我们在不同的后台数据库进行相同的查

[b]2.插入数据[/b]
       无论是DB还是Table类,都使用insert()方法。对于Oracle来说,如果要使用sequence作为自增的主键的话,需要使用trigger。
       比如,有tag表,主键为tagid,其对应的sequence为tag_seq,要插入数据时,需要先新建trigger:
create or replace trigger tag_tri
before insert on tag
for each row
declare
nextid number;
begin
IF :new.tagid IS NULL or :new.tagid=0 THEN
select tag_seq.nextval
into nextid
from sys.dual;
:new.tagid:=nextid;
end if;
end tag_tri;
其余部分和插入其它数据库相同
[php]
<?php
$table_name='TAG';
$row = array (
        'TAGNAME'   => $tagname,
        'TAGTOTAL'  => '1'
    );
$this->db->insert($table_name,$row);
?>[/php]

[b]3.更新数据[/b]
3.1直接执行update语句,参见文档。
3.2如果update语句中,有包含数据库的特殊关键字时,需要先将数据选出,然后再更新
[php]
<?php
    $where = $this->db->quoteInto('tagname = ?',$tagname);
               //如果只取一行的话,用fetchRow()就可以了
    $rowset = $this->tag->fetchAll($where);
    $count=$rowset->count();
    $tag = $rowset->current();                    
    if($count!=0){
        $tagid=$tag->TAGID;
        //tagtotal+1
               
        $tag->TAGTOTAL ++;  //应判断一下当前用户是否
        $tag->save();   
    }
?>[/php]

[b]4.删除数据[/b]
[php]
<?php
    //删除已有的collect表中记录
    // where条件语句
    $where = $this->db->quoteInto('USERID = ?', $userid)
        .$this->db->quoteInto('AND LINKID = ?', $linkid);
    // 删除数据并得到影响的行数
    $rows_affected =  $this->collect->delete($where);
?>[/php]

总结完毕。

[color=#ff0000]文章转载自:[/color][url=http://www.phpeye.com/][color=#ff0000]PHPEye社区[/color][/url]

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.