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='[email protected]';
$user->user_question=0;
$user->user_answer="hello world";
$user->save();
/***********创建一行方法2********************/
$data=array(
        'user_name'=>'alphachen',
         'user_mail'=>'[email protected]'
    );
$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'=>'[email protected]'
    );
$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");
出处: http://blog.csdn.net/ialpha/archive/2008/06/06/2515786.aspx

你可能感兴趣的:(数据库,职场,zf,休闲)