Zend_DB

Zend_DB

1.使用适配器连接数据库

使用适配器的构造函数

<?php

     requre_once 'Zend/Db/Adapter/Pdo/Mysql.php';

     $db=new Zend_Db_Adapter_Pdo_Mysql(Array(

     'host'=>'127.0.0.1',

     'username=>'webuser',

     'password'=>'password',

     'dbname'=>'dbname'));

?>

使用Zend_Db Factory连接数据库

 Factory 模式允许在运行时初始化一个对象,他在对一个手工创建的对象进行反馈的时候调用Factory模式。

<?php

require_once 'Zend/Db.php';

$db=Zend_Db::factory('Pdo_Mysql',array(

     'host'=>'127.0.0.1',

     'username'=>'webuser',

     'password'=>'password',

     'dbname'=>'test'

));

适配器参数

host:database host

username:access username

password:access password

dbname:the database name to use

port:the database server port

options:

driver_options:

adapterNamespace:当你使用的是一个自定义的适配器的时候,这个属性初始化了适配器的类名

2.数据获取模式

Zend_Db::FETCH_ASSOC

Zend_Db::FETCH_NUM

Zend_Db::FETCH_BOTH

Zend_Db::FETCH_COLUMN

Zend_Db::FETCH_OBJ

fetchAll()====> 在一个步骤中运行sql select查询并且获取他的查询结果

 

<?php

$sql='select * from bugs where bug_id=?';

$result=$db->fetchAll($sql,2);

?>

fetchAssoc()====>和fetchAll类似,返回的是关联数组的结果

fetchCol()=====>和fetchAll类似,不过只返回第一列的值。

fetchRow()=====>只返回第一行的值

fetchPairs()====>返回一个值-》结果的数组,第一列作为值,第二列作为结果。

fetchOne()====>相当于fetchCol和fetchRow的结合,只返回的是第一行第一列的一个值。

3.写如更改到数据库

插入数据

$data=array(

    'created_on'=>'2007-03-22',

     'bug_description'=>'something wrong',

     'bug_status'=>'new');

$db->insert('bugs',$data);

$data = array(
    
'created_on'      => new Zend_Db_Expr('CURDATE()'),
    
'bug_description' => 'Something wrong',
    
'bug_status'      => 'NEW'
);

$db->insert('bugs'$data);
$id=$db->lastInsertId();

$id=$db->lastInsertId('bugs','bug-id');

$id=$db->lastInsertId('bugs');

$id=$db->lastSequenceId('bugs_id_gen');

更新数据

 

<?php
$data 
= array(
    
'updated_on'      => '2007-03-23',
    
'bug_status'      => 'FIXED'
);

$n $db->update('bugs'$data'bug_id = 2');

<?php
$data 
= array(
    
'updated_on'      => '2007-03-23',
    
'bug_status'      => 'FIXED'
);

$where[] = "reported_by = 'goofy'";
$where[] = "bug_status = 'OPEN'";

$n $db->update('bugs'$data$where);

// Resulting SQL is:
//  UPDATE "bugs" SET "update_on" = '2007-03-23', "bug_status" = 'FIXED'
//  WHERE ("reported_by" = 'goofy') AND ("bug_status" = 'OPEN')


删除数据

<?php
$n 
$db -> delete ( 'bugs' 'bug_id = 3' );

 事务处理

 

<?php
// Start a transaction explicitly.
$db->beginTransaction();

try {
    
// Attempt to execute one or more queries:
    
$db->query(...);
    
$db->query(...);
    
$db->query(...);

    
// If all succeed, commit the transaction and all changes
    // are committed at once.
    
$db->commit();

} catch (
Exception $e) {
    
// If any of the queries failed and threw an exception,
    // we want to roll back the whole transaction, reversing
    // changes made in the transaction, even those that succeeded.
    // Thus all changes are committed together, or none are.
    
$db->rollBack();
    echo 
$e->getMessage();
}

创建一个statement

创建一个sqlstatement对象使用query()函数

<?php

$stmt=$db->query('select * from bugs where reported_by=? and bug_status=?',array('goofy','fixed'));

$row=$stmt->fetchAll();

var_dump($row);

 

fetch()从数据集中获得单独的一行

 有三个参数

fetch style 数据获取模式

cursor orientation 默认的是Zend_DB::FETCH_ORI_NEXT,意味着每一次调用fetch()

返回下一行的结果集,按照rdbms中的顺序。

offset  如果cursor orientation设置为Zend_DB::FETCH_ORI_ABS,那么offset数值就是返回的顺序数。

当所有的数据都被返回之后fetch()函数将返回false.

fetchAll()函数相当于fetch()函数的循环模式,他价格获得所有合适的结果集,并且存储在一个数组中。

fetchAll()的两个参数:fetch style。当fetchstyle为fetch_Col的时候,第二个参数设置的是返回第几列的值

fetchColumn()返回某一列的值,有一个参数指定的是需要返回的列的索引

fetchObject()返回值作为对象来处理。

适配器的select创建sql语句

$select=$db->select();

$select->from();

$select->where();

$select->order();

$select->limit(); 

 $stmt=$db->query($select)

$result=$stmt->fetchAll()

使用$select->__toString()可以输出sql语句;

-昱志 陈 08-5-20 上午9:58

 

$db->select()->from('user_account');

等效于sql语句select * from user_account;

$db->select()->from('user_account',array('user_mail','answer'=>'user_answer'));

等效于sql语句select user_mail,user_answer as answer from user_account;

$db->select()->from('user_account')->where('user_id>1');

等效于sql语句select * from user_account where user_id>1;

$db->select()->from('user_account')->where('user_id>1')->Orwhere("user_name='163'");

等效于sql语句select * from user_account where user_id>1 or user_name='163';

$db->select()->from('user_account')->where('user_id>1')->where("user_name='163'");

等效于sql语句select * from user_account where user_id>1 and user_name= '163';

$db->select()->from('user_account')->where('user_id>1')->order(array('user_id desc','user_email asc'))

 等效于sql语句select * from user_account where user_id>1 order by user_id desc ,user_email asc;

$db->select()->from(array('ua'=>'user_account'),array('user_password','user_mail'))->joinleft(array('ui'=>'user_info'),'ui.id=ua.id',array('description))->orderby(array('user_id desc'));

等效于sql语句select ua.user_mail,ua.user_password,ui.user_info from user_account as ua,user_info as ui where ui.id=ua.id order by user_id desc;

 


Zend_Db_Table

 需要创建自己的table

 Zend_Db_Table_Abstract::setDefaultAdapter($db);//选择默认适配器
Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);//使用cache缓存器缓存表信息。
class user_account extends Zend_Db_Table_Abstract {
 protected $_name='user_account';
 protected $_primary='user_id';
 protected $_sequence=true;
 public function insert(array $data){
  if (empty($data['in_time'])) {
         $data['in_time'] = timestamp();
        }
        if(empty($data['user_answer'])){
         $data['user_answer']='';
        }
        return parent::insert($data);
 }
 public function update(array $data,$where){
  $data['in_time'] = timestamp();
  return parent::update($data,$where);
 }
}

-昱志 陈 08-5-20 上午10:01

 


user_account的使用方法

$user=new user_account()//创建了一个针对表user_account的对象$user;

/**********创建一行方法1*********************/ 

$user->createRow();

$user->user_name='alphachen';

$user->user_mail='ialpha@163.com';

$user->user_question=0;

$user->user_answer="hello world";

$user->save();

/***********创建一行方法2********************/

$data=array(

        'user_name'=>'alphachen',

         'user_mail'=>'ialpha@163.com'

    );

$user->insert($data);

/************查找 一行**********************/

按照主键查找

$user->find(1);//查找user_id=1的行

$user->find(array(1,2,3));//查找user_id=1或者2或者3的行

 $select=$user->select()//建议使用select选择器

$rows=$user->fetchAll($select);//获得返回值

/*************更新数据方法1***************************/

$data=array(

        'user_name'=>'alphachen',

         'user_mail'=>'ialpha@163.com'

    );
$where = $user->getAdapter()->quoteInto('user_id = ?', 1234);
$user->update($data, $where);

/***************更新数据方法2***************************/

 $row=$user->fetchRow($user->select()->where('user_id=123');

$row->user_name='alphachen';

$row->save()

/**************删除数据*****************************/

 $user->delete("user_id=12");

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值