Zend Framework 第九节数据库操作学习总结
2012-07-28 17:49 java环境变量 阅读(171) 评论(0) 编辑 收藏 举报
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') |