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的中问验证码
Nov 25 PHP
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
php学习之function的用法
Jul 14 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
Jun 05 PHP
php判断是否为json格式的方法
Mar 04 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
Yii调试查看执行SQL语句的方法
Jul 15 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 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
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
PHP+DBM的同学录程序(1)
2006/10/09 PHP
php单件模式结合命令链模式使用说明
2008/09/07 PHP
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
offsetParent 算法分析
2010/04/05 Javascript
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
javascript动态修改Li节点值的方法
2015/01/20 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
详解JavaScript 的执行机制
2020/09/18 Javascript
python实现class对象转换成json/字典的方法
2016/03/11 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
python发送邮件实例分享
2017/07/28 Python
django中的setting最佳配置小结
2017/11/21 Python
Python实现微信小程序支付功能
2019/07/25 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
使用Python pip怎么升级pip
2020/08/11 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
工程预算与管理应届生求职信
2013/10/06 职场文书
高校辅导员推荐信范文
2013/12/25 职场文书
宠物店的创业计划书范文
2014/01/11 职场文书
工作证明英文模板
2014/10/21 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书