zoukankan      html  css  js  c++  java
  • Zend Framework 第九节数据库操作学习总结

    Zend Framework 第九节数据库操作学习总结
    2007-09-15 17:40

    Zend_Db_Adapter
    得到一个实例
    $config = array(
       'host'     => '127.0.0.1',
       'username' => 'root',
       'password' => '',
       'dbname'   => 'zf',
       'port'       => '3306',
    );
    $db = Zend_Db::factory('MYSQLI',$config);
    关于Zend_Db
    第一大部分:读数据
    fetchAll()方法可以接受:
    1.select sql语句
    2.Zend_Db_Select.对象
    实际上以下方法,也是可以接受这两个参数
    默认情况下返回的是相关数组,
    可以过方法setFetchMode()改变返回
    如果setFetchMode(Zend_Db::FETCH_OBJ)返回的是对象数组

    fetchPairs()这个比较特别,返回一相关数组。
    键为第一列返回的值,值为第二列的值,其它列忽略

    age name
    10 a
    20 b
    查询后返回array(10=>'a',20=>'b');

    fetchRow()这个方法返回一行,具体返回是相关数组还是什么用setFetchMode()决定
    fetchCol()返回第一列
    fetchOne()返回第一行,第一列。为一个值不是数组
    fetchAssoc()返回相关数组,相当于fetchAll()默认情况下的返回值

    第二大部分:写数据
    insert()
    第一个参数为要插入数据的表
    第二个参数为相关数组array("字段"=>"值")
    要插入的数据会自动处理,所以如果想不自动处理而是当做mysql表达式
    需要在传递时加 Zend_Db_Expr
    如:
    $row=array(
       'name'=>'curdate()',
       'address' => new Zend_Db_Expr ('curdate()')
    )
    这样子字段name会插入一个curdate()的字符串,而address插入一个时间值(curdate()的结果)
    lastInsertId()
    如果表中有自增长的字段,则插入数据后会返回这个值

    第三大部分,更新数据
    update()
    第一个参数,数据表
    第二个参数,更新后的值
    第三个参数,条件,一个表达式
    如:$db->update('test',$row,"name='terry' or address='terry'");
    如果第三个参数为数组形式如$where=array("name='terry'","address='terry'");
    会把各个值用and 连起来。因此看来还是直接写一个语句方便

    第四大部分,删除
    delete()
    第一个参数,数据表
    第二个参数,条件
    用法同update()一样

    到此关于Zend_Db_Adapter从得到一个对象,到添加,删除,更新,插入数据就结束了
    现在工作中常用的也就这些

    其它
    listTables() 列出当前数据库中的所有表
    describeTable()列出一个表的字段情况

    Zend_Db_Select
    这个也工作中常用的
    得到一个对象
    $select=$db->select()

    $select->from()
    from有三个参数
    第一个:哪个表
    第二个:哪此字段,用*表示所有字段,或把要显示的字段放在一个数组中
    SELECT `test`.`name` AS `n`, (age+5) AS `a` FROM `test`有时候注意加()表示这个一个
    表达式
    第三个: 哪个数据库

    $select->join()
    第一个参数,要join的表,
    第二个参数,连接条件
    第三个参数,要jion的表列出哪些字段,若为array()一个也不列,如果为空,列出所有


    $select->where()
    $select->orwhere()
    实际上放到一个把所有条件,不管是or,and放在一个句子里就可
    分开做的目录是为了安全提供一个?,然后一个字符串做替换,如
    where('price > ?', $minimumPrice);

    $select->group()分组
    $select->having()分组查询数据的条件

    $select->order()
    按什么排序列,参加为数组(多个字段)或字符串(一个字段)

    $select->limit(a,b)从第了个取a长度个
    这里有注意a,b必须为整数,如果写成"a,b",刚只有a起作用,意思从第0条返回a条

    $select->distinct()
    无参数,去掉重复的值。有时候与groupby返回的结果一样

    执行select的查询
    $stmt = $db->query($select);

    $result = $stmt->fetchAll();
    或用
    $stmt = $select->query();
    $result = $stmt->fetchAll();
    如果直接用
    $db->fetchAll($select)结果一样


    Zend_Db_Table
    必须要继承自 Zend_Db_Table_Abstract
    表接口,只能操作一个表,前边的Zend_Db,Zend_Db_Select可以操作多个表
    可以构造多个表对象,以同时操作多个表
    有多种方法,指明表名及数据库名,如
    class test extends Zend_Db_Table_Abstract
    {
       法一
       protected $_name='test';
       protected $_schema='zf';
       法二
       protected $_name='zf.test';
    }

    class test extends Zend_Db_Table_Abstract{}
    法一
    $test=new test(array('name'=>'test','schema'=>'zf'))
    法二
    $test=new test(array('name'=>'zf.test'))
    当然也可以不指定数据库,默认的为Zend_Db中的库

    在使用Zend_Db_Table之前,必须指定数据库连接器,用于指到一个活动的数据库连接

    有三种方法
    第一.在构造中用'db'指明如果$test=new test(array('db'=>$db))
    第二;Zend_Db_Table_Abstract::setDefaultAdapter($db);不过这样子只能用一个
    固定的数据库连接
    第三:
    Zend_Registry::set('my_db', $db);
    $table = new Bugs(array('db' => 'my_db'));
    这样子看了就法一还是比较常用的

    插入数据
    insert()
    更新数据
    update{}
    ....................实际上这些方法是调用了Zend_Db中同样的方法。
    只是少了第一个参数,数据表的名子

    另一个比Zend_Db多的是find方法,可以按主键查找数据,它返回的数据不是数组,而是
    对象rowset

    组合主键是用
    class BugsProducts extends Zend_Db_Table_Abstract{
    protected $_name = 'bugs_products';  
    protected $_primary = array('bug_id', 'product_id');
    }
    $table = new BugsProducts();
    // Find a single row with a compound primary key
    // Returns a Rowset
    $rows = $table->find(1234, 'ABC');
    // Find multiple rows with compound primary keys
    // Also returns a Rowset
    $rows = $table->find(array(1234, 5678), array('ABC', 'DEF'));

    zend_Db_Table中的fetchAll方法,也是返回对象rowset
    参数
    fetchAll($where = null, $order = null, $count = null, $offset = null)

    fetchRow返回一个对象row其中的toArray()方法可以将对象转成数组
    也可以用createRow()方法,先创建一个row然后指定数据再save
    前者相当于update,后者相当于insert
    delete用于删除,详情看http://framework.zend.com/manual/en/zend.db.table.row.html



    用fecthRow对读的数据可以直接修改,并用save方法保存到数据库

    info()返回与表有关的内容,相当于Zend_Db 中的DescribeTable('tablename')
  • 相关阅读:
    Android 调用已安装市场,进行软件评分的功能实现
    二十六个月Android学习工作总结
    Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1) 错误 解决方案(android-ndk)
    【Android】神奇的android:clipChildren属性
    Android利用setLayoutParams在代码中调整布局(Margin和居中)
    android 使用代码实现 RelativeLayout布局
    Android 布局学习
    Erlang cowboy 处理不规范的client
    HTTP 响应
    把字符串转换为整数
  • 原文地址:https://www.cnblogs.com/zcy_soft/p/1946629.html
Copyright © 2011-2022 走看看