Zend Framework数据库操作方法实例总结


Posted in PHP onDecember 11, 2016

本文实例讲述了Zend Framework数据库操作方法。分享给大家供大家参考,具体如下:

示例:

<?php
//
// SELECT *
//   FROM round_table
//   WHERE noble_title = "Sir"
//   ORDER BY first_name
//   LIMIT 10 OFFSET 20
//
// 你可以使用一种重复定义的方式...
$select->from('round_table', '*');
$select->where('noble_title = ?', 'Sir');
$select->order('first_name');
$select->limit(10,20);
// ...或者使用一种连续定义的方式:
$select->from('round_table', '*')
->where('noble_title = ?', 'Sir')
->order('first_name')
->limit(10,20);
// 但是,读取数据的方法相同
$sql = $select->__toString();
$result = $db->fetchAll($sql);
// 对于以上任一种方式,你都可以传送$select对象本身
// 使用Zend_Db_Select对象的 __toString()方法就可以得到查询语句
$result = $db->fetchAll($select);
?>

你也可以在你的查询语句中使用绑定的参数,而不需要自己为参数加引号。

<?php
//
// SELECT *
//   FROM round_table
//   WHERE noble_title = "Sir"
//   ORDER BY first_name
//   LIMIT 10 OFFSET 20
//
$select->from('round_table', '*')
  ->where('noble_title = :title')
  ->order('first_name')
  ->limit(10,20);
// 读取结果使用绑定的参数
$params = array('title' => 'Sir');
$result = $db->fetchAll($select, $params);
?>

同一表中查询多列数据

当需要从某一个指定的表查询某几列时,可以使用from()方法,将需要 查询的表名和列名都在该方法中指定。表名和列名都可以通过别名代替 ,而且也可以根据需要多次使用from()方法。

<?php
// 创建一个$db对象,假定adapter为Mysql
$select = $db->select();
// 从some_table表中读取a,b,c三列
$select->from('some_table', 'a, b, c');
// 同样可以:
$select->from('some_table', array('a', 'b', 'c');
// 从foo AS bar表中读取列bar.col
$select->from('foo AS bar', 'bar.col');
// 从foo, bar两个表中读取foo.col 别名为col1,bar.col别名为col2
$select->from('foo', 'foo.col AS col1');
$select->from('bar', 'bar.col AS col2');
?>

多表联合查询

当需要进行表联合查询时,可以使用join()方法。首先,设定进行表 联合查询的表名,然后是表联合的条件(ares注:该条件是针对多表 内部连接的条件),最后是查询的列名。同样,你可以根据需要多次 使用join()方法。

<?php
// 创建一个$db对象,假定adapter为Mysql.
$select = $db->select();
//
// SELECT foo.*, bar.*
//   FROM foo
//   JOIN bar ON foo.id = bar.id
//
$select->from('foo', '*');
$select->join('bar', 'foo.id = bar.id', '*');
?>

WHERE条件

当需要要增加where条件时,可以使用where()方法。你可以传送一个 普通的查询语句字符串,也可以传送一个使用?

<?php
// 创建一个$db对象,调用SELECT方法.
$select = $db->select();
//
// SELECT *
//   FROM round_table
//   WHERE noble_title = "Sir"
//   AND favorite_color = "yellow"
//
$select->from('round_table', '*');
$select->where('noble_title = "Sir"'); // embedded value
$select->where('favorite_color = ?', 'yellow'); // quoted value
//
// SELECT *
//   FROM foo
//   WHERE bar = "baz"
//   OR id IN("1", "2", "3")
//
$select->from('foo', '*');
$select->where('bar = ?', 'baz');
$select->orWhere('id IN(?)', array(1, 2, 3);
?>

GROUP BY分句

根据需要,可以多次使用group()方法给查询到的数据进行分组

<?php
// 创建一个$db对象,调用SELECT方法.
$select = $db->select();
//
// SELECT COUNT(id)
//   FROM foo
//   GROUP BY bar, baz
//
$select->from('foo', 'COUNT(id)');
$select->group('bar');
$select->group('baz');
// 同样可以这样调用 group() 方法:
$select->group('bar, baz');
// 还可以:
$select->group(array('bar', 'baz'));
?>

HAVING 条件

当需要在查询结果中加入having条件时,可以使用having()方法。 这种方法与where()方法的功能一样。

当你多次调用having()方法时,各个having的条件会“并”在一起进行操作; 假如你需要实现“或 ”操作,可以使用orHaving()方法 。

<?php
// 创建一个$db对象,调用SELECT方法.
$select = $db->select();
//
// SELECT COUNT(id) AS count_id
//   FROM foo
//   GROUP BY bar, baz
//   HAVING count_id > "1"
//
$select->from('foo', 'COUNT(id) AS count_id');
$select->group('bar, baz');
$select->having('count_id > ?', 1);
?>

ORDER BY 分句

根据需要,可以多次使用order()方法给查询到的数据进行排序

<?php
// 创建一个$db对象,调用SELECT方法.
$select = $db->select();
//
// SELECT * FROM round_table
//   ORDER BY noble_title DESC, first_name ASC
//
$select->from('round_table', '*');
$select->order('noble_title DESC');
$select->order('first_name');
// 同样可以这样调用 order() 方法:
$select->order('noble_title DESC, first_name');
// 还可以:
$select->order(array('noble_title DESC', 'first_name'));
?>

通过总数和偏移量进行LIMIT限制

Zend_db_select可以支持数据库层的limit语句限制。对于一些数据库,例如mysql 和postgresql,实现这些是相对容易的,因为这些数据库本身就支持“limit:count” 语法。

对于其他一些数据库来说,例如微软的sqlserver和oracle,要实现limit功能 就不那么简单了,因为他们本身就根本不支持limit语句。MS-SQL有一个top语 句来实现,而oracle要实现limit功能,查询语句的写法就更特殊一些。由于 zend_db_select内在地工作的方式,我们可以重写select语句以在oracle中 实现上述开源数据库系统的limit功能。

要通过设定查询的总数和偏移量对返回的结果进行限制,可以使用limit()方法, 总数值和一个可选的偏移量作为调用该方法的参数。

<?php
// 首先,一个简单的 "LIMIT :count"
$select = $db->select();
$select->from('foo', '*');
$select->order('id');
$select->limit(10);
//
// 在mysql/psotgreSql/SQLite,可以得到这样的语句:
//
// SELECT * FROM foo
//   ORDER BY id ASC
//   LIMIT 10
//
// 但是在Microsoft SQL下,可以得到这样的语句:
//
// SELECT TOP 10 * FROM FOO
//   ORDER BY id ASC
//
//
// 现在, 是更复杂的 "LIMIT :count OFFSET :offset"方法
$select = $db->select();
$select->from('foo', '*');
$select->order('id');
$select->limit(10, 20);
//
// 在mysql/psotgreSql/SQLite,可以得到这样的语句:
//
// SELECT * FROM foo
//   ORDER BY id ASC
//   LIMIT 10 OFFSET 20
//
// 但是在Microsoft SQL下,由于不支持偏移量功能,可以得到这样sql语句:
//
// SELECT * FROM (
//   SELECT TOP 10 * FROM (
//     SELECT TOP 30 * FROM foo ORDER BY id DESC
//   ) ORDER BY id ASC
// )
//
// Zend_Db_Adapter 可以自动的完成sql语句的动态创建.
//
?>

通过页数和总数进行LIMIT限制

Zend_db_select同样也提供了翻页的limit功能。假如你想要从结果中找到 特定“页数”的结果,使用limitPage()方法;将你需要的页数值和每页显示 的数据值数作为参数传过去即可。

<?php
// 构造基础的select方法:
$select = $db->select();
$select->from('foo', '*');
$select->order('id');
// ... 限制到第三页,每页包括10行数据
$select->limitPage(3, 10);
//
// 在MySQL/PostgreSQL/SQLite下, 可以得到:
//
// SELECT * FROM foo
//   ORDER BY id ASC
//   LIMIT 10 OFFSET 20
//
?>

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP学习之PHP表达式
Oct 09 PHP
php和js交互一例-PHP教程,PHP应用
Jan 03 PHP
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
Mar 07 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
从PHP的源码中深入了解stdClass类
Apr 18 PHP
php遍历树的常用方法汇总
Jun 18 PHP
PHP导出Excel实例讲解
Jan 24 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
php解决和避免form表单重复提交的几种方法
Aug 31 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
详解PHP 二维数组排序保持键名不变
Mar 06 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 PHP
smarty模板数学运算示例
Dec 11 #PHP
Zend Framework入门应用实例详解
Dec 11 #PHP
Zend Framework前端控制器用法示例
Dec 11 #PHP
Zend Framework路由器用法实例详解
Dec 11 #PHP
Zend Framework分发器用法示例
Dec 11 #PHP
PHP与SQL语句常用大全
Dec 10 #PHP
PHP中SQL查询语句的id=%d解释(推荐)
Dec 10 #PHP
You might like
一个php作的文本留言本的例子(二)
2006/10/09 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
探寻PHP脚本不报错的原因
2014/06/12 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
如何使用angularJs
2017/05/08 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
详解angular2 控制视图的封装模式
2018/12/27 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
python 输出一个两行字符的变量
2009/02/05 Python
python爬虫常用的模块分析
2014/08/29 Python
python妹子图简单爬虫实例
2015/07/07 Python
详解Python3中yield生成器的用法
2015/08/20 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
python爬虫基础知识点整理
2020/06/02 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
python如何实现递归转非递归
2021/02/25 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
介绍一下linux的文件系统
2012/03/20 面试题
办公室助理岗位职责
2013/12/25 职场文书
借款担保书范文
2014/05/13 职场文书
WINDOWS下安装mysql 8.x 的方法图文教程
2022/04/19 MySQL