`

Zend Framework数据库操作

阅读更多

说明: 摘自ZF手册中文版
1.执行查询并返回结果
1.1 使用 Zend_Db_Adapter
 一旦你得到了一个Zend_Db_Adapter 实例, 你可以直接 执行sql语句进行查询. Zend_Db_Adapter 传送这些sql语 句到底层的PDO对象,由PDO对象组合并执行他们,在有查询结果的情况 下,返回一个PDOStatement对象以便对结果进行处理。

<?php
	
// 创建一个$db对象,然后查询数据库
// 使用完整的sql语句直接进行查询.
$sql = $db->quoteInto(
    'SELECT * FROM example WHERE date > ?',
    '2006-01-01'
);
$result = $db->query($sql);

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

?>



或者使用fetch开头系列方法获得结果集:

对于每一种 fetch系列 的方法来说,你需 要传送一个select的sql语句;假如你在操作语句中使用指定的占位符,你也可以 传送一个绑定数据的数组对你的操作语句进行处理和替换。 Fetch系列 的方法包括:

  • fetchAll()

  • fetchAssoc()

  • fetchCol()

  • fetchOne()

  • fetchPairs()

  • fetchRow()


<?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')
);



?>

1.2 使用Zend_Db_Select方法

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

创建一个zend_db_select实例最简单的方法就是使用zend_db_adapter::select()方法

 

<? php

//在model中取得连接,并进行相应数据库操作

$this->db = Zend_Registry::get('db');       

$select = $this->db->select(); $select->from('link_info', 'link_info.*')                ->join('link_tag_collect', 'link_info.linkid=link_tag_collect.linkid')                ->where('user_friend.userid=?',$userid)

               ->distinct(link_info.linkid)                ->order('link_tag_collect.addtime DESC')                -2007-12-18>limit(10,0); $sql = $select->__toString();         $result = $this->db->fetchALL($sql);

?>


1.3 使用 Zend_Db_Table
Zend_Db_Table 是Zend Framework的表模块.它通过zend_db_adapter连接到数据库,为数据库模式检查表对象,
并对该表进行操作和查询.

<?php
class RoundTable extends Zend_Db_Table {}

$table = new RoundTable();
$db = $table->getAdapter();

// SELECT * FROM round_table
//     WHERE noble_title = "Sir"
//     ORDER BY first_name
//     LIMIT 10 OFFSET 20

$where = $db->quoteInto('noble_title = ?', 'Sir');
$order = 'first_name';
$count = 10;
$offset = 20;

$rowset = $table->fetchAll($where, $order, $count, $offset);
?>


以上都为废话,从ZF手册中皆能得到。

在实际中,我最常使用的是

 

  • 从model中获得数据库连接,然后使用ZEND_DB_SELECT。

在tag.php中

<?php
 public function getTopTag(){
        
        $select = $this->db->select();
        $select->from($this->_name, '*')
               ->order('TAGTOTAL DESC')
               ->limit(10,0);
             

        $sql = $select->__toString();
        $result = $this->db->fetchALL($sql);
        return $result;
    }
?>


在TagController.php中

<?php
class TagController extends Zend_Controller_Action
	private $tag;
	function init() {
		parent::init();
		Zend_Loader::loadClass('Tag');		
		$this->tag = new Tag();		
	}
	function topAction(){
		$thi->tag->getTopTag();
		...
	}
?>

 

  • 使用ZEND_DB_TABLE

在Tag.php中

<?php
class Tag extends Zend_Db_Table
{
    protected $_name = "TAG_INFO";
    protected $_primary = 'TAGID';
}
?>
在TagController.php中
<?php
class TagController extends Zend_Controller_Action
	private $tag;
	function init() {
		parent::init();
		Zend_Loader::loadClass('Tag');		
		$this->tag = new Tag();		
	}
	function topAction(){
		$order = 'TAGTOTAL';	
		$count = 10;
		$offset = 0;
 		$thi->tag->fetchAll( $order, $count, $offset);
		...
	}
?>


最好还是选用方法一,能够将对数据的操作都封装在model中。
2.插入数据
无论是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
$table_name='TAG';
$row = array (
		'TAGNAME'   => $tagname,
		'TAGTOTAL'  => '1'
	);
$this->db->insert($table_name,$row);
?>



3.更新数据
3.1直接执行update语句,参见文档。
3.2如果update语句中,有包含数据库的特殊关键字时,需要先将数据选出,然后再更新

<?php
	$where = $this->db->quoteInto('tagname = ?',$tagname);
	$rowset = $this->tag->fetchAll($where);
	$count=$rowset->count();
	$tag = $rowset->current();					
	if($count!=0){
		$tagid=$tag->TAGID;
		//tagtotal+1
				
		$tag->TAGTOTAL ++;  //应判断一下当前用户是否
		$tag->save();	
	}
?>


4.删除数据

<?php
	//删除已有的collect表中记录
	// where条件语句
	$where = $this->db->quoteInto('USERID = ?', $userid)
		.$this->db->quoteInto('AND LINKID = ?', $linkid);

	// 删除数据并得到影响的行数
	$rows_affected =  $this->collect->delete($where);
?>



tips:
注意表名、字段名等的大小写!

分享到:
评论

相关推荐

    Zend framework数据库简单操作

    在 Zend Framework 中,数据库操作主要通过 `Zend_Db` 组件来实现。`Zend_Db` 提供了对多种数据库系统的支持,如 MySQL、PostgreSQL、SQLite 等。开发者可以使用它来执行 SQL 查询,进行数据的读取、插入、更新和...

    Zend Framework数据库操作方法实例总结

    本文实例讲述了Zend Framework数据库操作方法。分享给大家供大家参考,具体如下: 示例: &lt;?php // // SELECT * // FROM round_table // WHERE noble_title = "Sir" // ORDER BY first_name // LIMIT 10 OFFSET ...

    zendframework数据库操作总结.rar

    本总结将深入探讨 Zend Framework 中的数据库操作,帮助开发者更好地理解和掌握这一关键领域。 1. 数据库适配器:Zend Framework 提供了多种数据库适配器,如 MySQLi, PDO_MYSQL, PDO_PGSQL 等,这些适配器使得框架...

    Zend Framework 多表关联 数据库操作、事务处理

    **标题详解:** "Zend Framework 多表关联 数据库操作、事务处理" Zend Framework 是一个开源的PHP框架,用于构建企业级的Web应用。在标题中提到的“多表关联”,指的是在数据库设计中,当两个或多个表之间存在...

    PHP100视频教程77:Zend.framework数据库操作之编辑和视图函数.rar

    【PHP100视频教程77:Zend Framework数据库操作之编辑和视图函数】 本教程主要聚焦于使用 Zend Framework 进行数据库操作,特别是编辑和视图功能的实现。Zend Framework 是一个开源、全面的PHP开发框架,它提供了一...

    zendframework数据库总结

    ### zendframework数据库操作总结 #### 一、概述 在ZEND FRAMEWORK(简称ZF)中,数据库操作是一项非常重要的功能,它提供了丰富的API来帮助开发者更便捷地与数据库交互。本文将详细介绍ZF中的几种主要数据库操作...

    Zend Framework数据库操作技巧总结

    本文实例总结了Zend Framework数据库操作。分享给大家供大家参考,具体如下: Zend_Db数据库知识 例子: Model文件: $this-&gt;fetchAll(is_jian=1,id DESC,0,2)-&gt;toArray(); //根据is_jian=1,按id倒序排列取前2条...

    ZendFramework-1.10.4-minimal

    3. **组件库**:Zend Framework 提供了一个强大的组件库,如 Zend_Db 用于数据库操作,Zend_View 用于视图渲染,Zend_Auth 和 Zend_Acl 用于身份验证和访问控制,以及 Zend_Feed 处理 RSS/Atom 订阅等。 4. **面向...

    zend framework中英文手册.rar

    1. **组件化设计**:Zend Framework 提供了多个独立的、可重用的组件,如数据库访问、缓存、邮件、表单处理等,开发者可以根据项目需求自由组合。 2. **企业级兼容性**:框架支持多种标准,如PSR-0、PSR-1、PSR-2等...

    Zend Framework 多数据库配置

    由于不同数据库间的事务可能不兼容,因此在进行跨数据库操作时,需要特别小心。在 Zend Framework 中,通常需要手动管理事务,确保每个数据库的提交和回滚操作独立进行。 此外,对于更复杂的数据库策略,比如读写...

    zend framework 中文手册

    2. **组件体系**: Zend Framework 包含了多个独立的组件,如 Zend_Db(数据库操作)、Zend_Session(会话管理)、Zend_View(视图处理)、Zend_Controller(控制器)等,每个组件都有明确的功能,可以单独使用或与...

    基于Zend Framework 框架的CMS PHP 源代码

    Zend Framework推崇“选择性使用”原则,开发者可以根据项目需求选择使用其中的部分或全部组件,极大地提高了开发效率和代码质量。 **二、CMS系统的核心功能** CMS系统通常包含以下核心功能: 1. **内容创建与...

    ZendFramework 1.12.9 代码和文档.rar

    1. **下载与解压**:首先,从官方网站或者提供的压缩包"ZendFramework-1.12.9.zip"下载并解压到服务器的适当位置。 2. **环境要求**:确保服务器环境满足PHP 5.2.5或更高版本。 3. **配置自动加载**:通过设置`...

    zend framework 手册 chm

    2009-07-01最新更新,真实有效zend framework 手册 chm

    zend framework教程.zip

    4. **数据库操作**:利用 Zend_Db 进行数据库操作,包括CRUD(创建、读取、更新、删除)和高级查询。 5. **表单处理**:使用 Zend_Form 处理用户输入,进行验证和过滤。 6. **服务和API开发**:学习如何使用 Zend ...

    zend framework 中文版手册(最新)

    3. **数据库访问(Zend_Db)**:Zend Framework 提供了 Zend_Db 组件来处理数据库操作,支持多种数据库系统,如 MySQL、PostgreSQL 和 SQL Server。手册涵盖了连接管理、查询构造、事务处理等关键内容。 4. **表单...

    ZendFramework最新版本

    - **数据库抽象层**:提供了一套强大的数据库抽象层,支持多种数据库系统,如 MySQL、PostgreSQL 和 SQLite,方便进行数据库操作。 - **表单和验证**:内置的表单和验证组件简化了表单创建和数据验证过程,确保...

    zend framework 1.7.5 使用基本例子

    在 Zend Framework 中,你可以使用 `Zend_Db` 组件与数据库进行交互。创建一个新的 "models" 目录,并在此处定义你的模型类。这些类可以继承自 `Zend_Db_Table_Abstract`,并覆盖其中的方法以实现特定的数据操作。 ...

Global site tag (gtag.js) - Google Analytics