zoukankan      html  css  js  c++  java
  • 了解Zend中的数据库组件

    这编文章,主要是做些测试的东西,就是了解Zend中的数据库组件的使用,熟悉流程。

    首先复习一下数据库的基础内容,不包含数学问题。

    复习的例子大多是出自于书上的。

    1. 表

    clip_image002

    有了一个表,就需要将其映射到一个类中。

    clip_image004

    这个类简单描叙了银行客户

    2. 关联

    多对多关联

    类的表示

    clip_image006

    SQL表

    clip_image008

    多对多关联,是将关系抽取到一个新表中实现的。

    一对多关联:

    clip_image010

    clip_image012

    clip_image014

    一对多关联中,多方,都有一个外键,连接到一方

    一对一关联

    clip_image016

    clip_image018

    clip_image019

    限定关联:

    clip_image021

    clip_image023

    这里添加了bank_ID,account_code,且是unique属性,意思是指定的银行通过指定的账户号码,可以找到一个账号。

    继承

    clip_image025

    clip_image027

    注意这里添加了account_type ,存储子类的表名,通过这个字段,可以找到对应的子类

    clip_image029

    上面已经温习了类和数据库的部分关系。

    下面是具体到代码,基于Zend Framework的数据库组件,用到的数据表是上面的。会添加少量数据来测试。

    数据库连接:

    使用Zend_DB_Adapter ,这个对象的获得是通过工厂方法来获得,这样可以使这个组件支持多种类型的数据库。

    这里主要写写MySQL的连接。其他的查看文档

    $param = array(

    'username'=>'root',

    'password'=>'123456',

    'dbname'=>'test'

    );

    $db = Zend_db::factory('MYSQLI',$param);

    print_r($db);

    这样就可以打印出类相关的信息。证明连接成功了。

    查询语句:

    先给Customer添加数据。

    insert into Customer values(0,'user1',0);

    insert into Customer values(1,'user2',0);

    查询:

    $Sql = "select * from Customer";

    $result = $db->query($Sql);

    $row = $result->fetchAll();

    插入语句:

    $id = 3;

    $param = array(

    'username'=>'root',

    'password'=>'123456',

    'dbname'=>'test'

    );

    $db = Zend_db::factory('MYSQLI',$param);

    $val = array(

    'customer_ID'=>$id,

    'cust_name'=>'user'.$id,

    'temp_amount'=>12

    );

    $table = 'Customer';

    $rowAffect = $db->insert($table,$val);

    echo $rowAffect;

    上面的插入非常例牌。在使用这样的插入语句的时候,会自动给变量的值加双引号。

    下面是结果

    clip_image031

    查询返回可以用以下的方法来处理:返回结果或者结果集

    · fetchAll()

    · fetchAssoc()

    · fetchCol()

    · fetchOne()

    · fetchPairs()

    · fetchRow()

    分别测试一下。

    $param = array(

    'username'=>'root',

    'password'=>'123456',

    'dbname'=>'test'

    );

    $db = Zend_db::factory('MYSQLI',$param);

    $table = 'Customer';

    //返回所有行,作为数组

    $sql = "select * from Customer";

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

    print_r($result);

    //返回所有行,作为数组,结果与上相同

    $result = $db->fetchAssoc($sql);

    print_r($result);

    //返回所有行的第一个字段,感觉在构造语句时要不选择所有

    $result = $db->fetchCol($sql);

    print_r($result);

    //返回一行,作为数组

    $result = $db->fetchOne($sql);

    print_r($result);

    //返回所有行,第一个字段作为key,第二个字段作为val,是一个数组

    $result = $db->fetchPairs($sql);

    print_r($result);

    //返回一行。

    $result = $db->fetchRow($sql);

    print_r($result);

    更新语句:

    $param = array(

    'username'=>'root',

    'password'=>'123456',

    'dbname'=>'test'

    );

    $db = Zend_db::factory('MYSQLI',$param);

    $set = array(

    'cust_name'=>'updateusername'

    );

    /*这里不应该用这样的方式,会不安全

    $where = 'customer_ID = 3';

    */

    $where = $db->quoteInto('customer_ID=?',3);

    $table = 'Customer';

    $rowAffect = $db->update($table,$set,$where);

    echo $rowAffect;

    结果如下:

    clip_image033

    删除语句:

    $param = array(

    'username'=>'root',

    'password'=>'123456',

    'dbname'=>'test'

    );

    $db = Zend_db::factory('MYSQLI',$param);

    $table = 'Customer';

    $where = $db->quoteinto('customer_ID=?',3);

    $rowAffect = $db->delete($table,$where);

    echo $rowAffect;

    结果:

    clip_image035

    除了上面的方法外,还有更加方便更加多功能的组件可以实现对数据库的操作。

    就是使用statement组件。

    测试的方式与上面相同。由于全部是英文,可能会有些错误。以后要注意修正。

    创建statement

    $param = array(

    'username'=>'root',

    'password'=>'123456',

    'dbname'=>'test'

    );

    $db = Zend_db::factory('MYSQLI',$param);

    $table = 'Customer';

    //使用select,show,desc来返回结果集

    $sql1 = "select * from Customer";

    $sql2 = "show tables";

    $sql3 = "desc Customer";

    $stm1 = $db->query($sql1);

    $stm2 = $db->query($sql2);

    $stm3 = $db->query($sql3);

    //使用statement的构造函数,使用了预构造sql语句,statement的执行方法,问号参数

    $sql4 = "select * from Customer where customer_ID = ?";

    $stm4 = new Zend_Db_Statement_Mysqli($db,$sql4);

    $stm4->execute(array('1'));

    //使用名字参数,这里运行错误,看来MySQL是不支持这个方法了。

    /*

    $sqlname = "select * from Customer where customer_ID = :id";

    $stmname = new Zend_Db_Statement_Mysqli($db,$sqlname);

    $stmname->execute(array(":id"=>'1'));

    */

    //一行一行返回所有数据:自动移动到下一行,没有则返回FALSE

    //由于上面不断的执行,所以要重新执行

    $stmFetch = new Zend_Db_Statement_Mysqli($db,$sql1);

    $stmFetch->execute();

    while ($row = $stmFetch->fetch()){

    echo $row['cust_name'].'<br/>';

    }

    //返回所有数据,指针移动到最后

    $rows = $stmFetch->fetchAll();

    for($i=0;$i<count($rows);$i++){

    echo $rows['cust_name'];

    }

    //改变fetch模式

    $num = new Zend_Db_Statement_Mysqli($db,$sql1);

    $num->execute();

    $num->setFetchMode(Zend_Db::FETCH_NUM);

    $rows = $num->fetchAll();

    print_r($rows);

    //返回一行指定的列,通过数字来指定

    $column = new Zend_Db_Statement_Mysqli($db,$sql1);

    $column->execute();

    $rowcol = $column->fetchColumn(1);

    echo $rowcol;

    //返回一个对象,这个有点不知道用在何处

    $obj = new Zend_Db_Statement_Mysqli($db,$sql1);

    $obj->execute();

    $rowobj = $obj->fetchObject();

    print_r($rowobj);

    Select 组件:

    就是给查询专用的组件,通过db_adapter来得到,执行所有方法都是返回一个字符串,用于组合成查询语句,比我写的查询语句生成,高级多的东西了。以后有机会一定要好好看看他的代码。下面是测试的代码,详细请看帮助文档。

    $param = array

    (

    'username'=>'root',

    'password'=>'123456',

    'dbname'=>'test'

    );

    $db = Zend_Db::factory('MySqli',$param);

    $select = $db->select();

    //随便弄的查询

    $select->from('Customer','*')

    ->where('customer_ID=1');

    $rows = $db->query($select);

    print_r($rows->fetchAll());

    unset($select);

    //查询多列数据

    $select = $db->select();

    $select->from('Customer',array('customer_ID','cust_name'));

    $rows = $db->query($select);

    $rows = $rows->fetchAll();

    print_r($rows);

    unset($select);

    //多表联合查询,对于其他联合查询,参数一致

    $select = $db->select();

    //select * from Customer join address on address.customer_ID = customer.Customer_ID

    $select->from('Customer','*');

    $select->join('address','address.Customer_ID = Customer.Customer_ID');

    $rows = $db->query($select);

    $rows = $rows->fetchAll();

    print_r($rows);

    unset($select);

    //where语句的and和or

    $select = $db->select();

    //select * from Customer join address on address.customer_ID = customer.Customer_ID

    $select->from('Customer','*');

    $select->where('customer_ID=?',1);

    $rows = $db->query($select);

    $rows = $rows->fetchAll();

    print_r($rows);

    unset($select);

    //Group By 语句

    $select = $db->select();

    //select * from Customer join address on address.customer_ID = customer.Customer_ID

    $select->from('Customer','count(customer_ID)');

    $select->group(array('temp_amount'));

    $rows = $db->query($select);

    $rows = $rows->fetchAll();

    print_r($rows);

    unset($select);

    //Having语句

    $select = $db->select();

    //select * from Customer join address on address.customer_ID = customer.Customer_ID

    $select->from('Customer','count(customer_ID) as id');

    $select->group(array('temp_amount'));

    $select->having('id=2');

    $rows = $db->query($select);

    $rows = $rows->fetchAll();

    print_r($rows);

    unset($select);

    //order by语句

    $select = $db->select();

    //select * from Customer join address on address.customer_ID = customer.Customer_ID

    $select->from('Customer','*');

    $select->order('customer_ID desc');

    $rows = $db->query($select);

    $rows = $rows->fetchAll();

    print_r($rows);

    unset($select);

    //limit 语句

    $select = $db->select();

    //select * from Customer join address on address.customer_ID = customer.Customer_ID

    $select->from('Customer','*');

    $select->order('customer_ID desc');

    $select->limit(1,1);

    $rows = $db->query($select);

    $rows = $rows->fetchAll();

    print_r($rows);

    unset($select);

    //翻页功能

    $select = $db->select();

    //select * from Customer join address on address.customer_ID = customer.Customer_ID

    $select->from('Customer','*');

    $select->order('customer_ID desc');

    $select->limitPage(1,1);

    $rows = $db->query($select);

    $rows = $rows->fetchAll();

    print_r($rows);

    unset($select);

    基础语法到此为止,下一篇将是更加高级的东西,也是最重要的东西,期待自己快点学懂

  • 相关阅读:
    赶集个人 车源推送到 58
    fsockopen get,post 封装 (转)
    php write excel
    《HTTP协议详解》读书笔记---请求篇之消息报头
    《HTTP协议详解》读书笔记---请求篇之响应状态码
    《HTTP协议详解》读书笔记---请求篇之情求方法
    高效使用 GNOME Files(Nautilus) 管理文件
    手机无法连接 GSConnect:防火墙未开放端口
    Ubuntu 上安装 ArtiPub(一款开源的一文多发平台)
    GNOME 桌面必备扩展(GNOME Shell Extensions)
  • 原文地址:https://www.cnblogs.com/xiaohunshi/p/1760074.html
Copyright © 2011-2022 走看看