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个人网站架设连环讲(二)
Oct 09 PHP
PHP中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
Dec 31 PHP
php实现rc4加密算法代码
Apr 25 PHP
php长字符串定义方法
Jul 12 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
Yii入门教程之目录结构、入口文件及路由设置
Nov 25 PHP
php如何连接sql server
Oct 16 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
PHP区块查询实现方法分析
May 12 PHP
PHP常见过waf webshell以及最简单的检测方法
May 21 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 15 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以ROOT权限执行系统命令的方法
2011/02/10 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
5 cool javascript apps
2007/03/24 Javascript
js 多浏览器分别判断代码
2010/04/01 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
修改npm全局安装模式的路径方法
2018/05/15 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
Python操作列表之List.insert()方法的使用
2015/05/20 Python
Python实现豆瓣图片下载的方法
2015/05/25 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
Python进行特征提取的示例代码
2020/10/15 Python
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
网络工程师的自我评价
2013/10/02 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
手术室护士个人总结
2015/02/13 职场文书
关于做家务的心得体会
2016/01/23 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python