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);

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

  • 相关阅读:
    leetcode 576. Out of Boundary Paths 、688. Knight Probability in Chessboard
    leetcode 129. Sum Root to Leaf Numbers
    leetcode 542. 01 Matrix 、663. Walls and Gates(lintcode) 、773. Sliding Puzzle 、803. Shortest Distance from All Buildings
    leetcode 402. Remove K Digits 、321. Create Maximum Number
    leetcode 139. Word Break 、140. Word Break II
    leetcode 329. Longest Increasing Path in a Matrix
    leetcode 334. Increasing Triplet Subsequence
    leetcode 403. Frog Jump
    android中webView加载H5,JS不能调用问题的解决
    通过nginx中转获取不到IP的问题解决
  • 原文地址:https://www.cnblogs.com/xiaohunshi/p/1760074.html
Copyright © 2011-2022 走看看