Zend Framework数据库操作技巧总结


Posted in PHP onFebruary 18, 2017

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

Zend_Db数据库知识

例子:

Model文件:

$this->fetchAll("is_jian=1","id DESC",0,2)->toArray();
//根据is_jian=1,按id倒序排列取前2条记录当第一个参数为null时,则直接按id倒序排列ASC为正序。

路由文件:

$video=new Video();//实例化数据库类
$this->view->get2Video =$video->get2Video();//取到2条首页推荐的数据

index.phtml文件:

<?php foreach ($this->get2Video as $video): ?>
<?=$video['id']; ?>
<?=$video['name']; ?>
<? endforeach; ?>

添加引号防止数据库攻击

quote用法

$value = $db->quote('St John"s Wort');
// $value 现在变成了 '"St John\"s Wort"' (注意两边的引号)
// 为数组加引号
$value = $db->quote(array('a', 'b', 'c'));
// $value 现在变成了 '"a", "b", "c"' (","分隔的字符串)

quoteInto用法

echo $where = $db->quoteInto('id = ?', 1);
// $where 现在为 'id = "1"' (注意两边的引号)
// 在where语句中为数组加上引号
$where = $db->quoteInto('id IN(?)', array(1, 2, 3));
// $where 现在为 'id IN("1", "2", "3")' (一个逗号分隔的字符串)

(1)数据查询总结

直接进行查询.    ( 使用完整的sql语句)

//function quoteInto($text, $value, $type = null, $count = null)
$db = $this->getAdapter();
$sql = $db->quoteInto('SELECT * FROM `m_video` WHERE `is_guo` =?', '1');
$result = $db->query($sql);
// 使用PDOStatement对象$result将所有结果数据放到一个数组中
$videoArray = $result->fetchAll();

fetchAll用法

fetchAll($where = null, $order = null, $count = null, $offset = null)

取回结果集中所有字段的值,作为连续数组返回,如果参数不设置就写成null

可以取回结果集的指定条数

$videoArray=$this->fetchAll("is_jian=1 and is_guo=1","id DESC",0,2)->toArray();

fetchAssoc用法

fetchAssoc($sql, $bind = array())

取回结果集中所有字段的值,作为关联数组返回, 第一个字段作为码

$db = $this->getAdapter();
$videoArray=$db->fetchAssoc("SELECT * FROM m_video WHERE `is_jian` = :title",array('title' => '1'));

fetchCol用法

fetchCol($sql, $bind = array())

取回所有结果行的第一个字段名

$db = $this->getAdapter();
$videoArray=$db->fetchCol("SELECT name FROM m_video WHERE `is_jian` = :title",array('title' => '1'));

fetchOne用法

fetchOne($sql, $bind = array())

只取回第一个字段值

$db = $this->getAdapter();
echo $videoArray=$db->fetchOne("SELECT count(*) FROM m_video WHERE `is_jian` = :title",array('title' => '1'));

fetchPairs用法

fetchPairs($sql, $bind = array())

取回一个相关数组,第一个字段值为码(id),第二个字段为值(name)

返回:Array( [1] => 十二生肖奇缘    [2] => 桃花运),1,2:为id字段。

$db = $this->getAdapter();
$videoArray=$db->fetchPairs("SELECT id, name FROM m_video WHERE is_jian = :title",array('title' => '1'));

fetchRow用法

fetchRow($where = null, $order = null)

只取回结果集的第一行

$videoArray=$this->fetchRow("is_jian=1 and is_guo=1", 'id DESC')->toArray();

query用法

//function query($sql, $bind = array())
$db = $this->getAdapter();
$result = $db->query('SELECT * FROM `m_video`');
//$result = $db->query('SELECT * FROM `m_video` WHERE `name` = ? AND id = ?',array('十二生肖奇缘', '1'));
//$result->setFetchMode(Zend_Db::FETCH_OBJ);//FETCH_OBJ为默认值,FETCH_NUM,FETCH_BOTH
//while ($row = $result->fetch()) {
//  echo $row['name'];
//}
//$rows = $result->fetch();
//$rows = $result->fetchAll();
//$obj = $result->fetchObject();//echo $obj->name;
// echo $Column = $result->fetchColumn(0);//得到结果集的第一个字段,比如0为id号,用于只取一个字段的情况
print_r($rows);

select用法

$db = $this->getAdapter();
$select = $db->select();
$select->from('m_video', array('id','name','clicks'))
->where('is_guo = :is_guo and name = :name')
->order('name')// 按什么排序列,参加为数组(多个字段)或字符串(一个字段)
->group()//分组
->having()//分组查询数据的条件
->distinct()// 无参数,去掉重复的值。有时候与groupby返回的结果一样
->limit(10);
// 读取结果使用绑定的参数
$params = array('is_guo' => '1','name'=>'十二生肖奇缘');
//$sql = $select->__toString();//得到查询语句,可供调试
$result = $db->fetchAll($select,$params);
执行select的查询
$stmt = $db->query($select);
$result = $stmt->fetchAll();

或用

$stmt = $select->query();
$result = $stmt->fetchAll();

如果直接用

$db->fetchAll($select)

结果一样

多表联合查询用法

$db = $this->getAdapter();
$select = $db->select();
$select->from('m_video', array('id','name','pic','actor','type_id','up_time'))
->where('is_guo = :is_guo and is_jian = :is_jian')
->order('up_time')
->limit(2);
$params = array('is_guo' => '1','is_jian'=>'1');
$select->join('m_type', 'm_video.type_id = m_type.t_id', 'type_name');//多表联合查询
$videoArray = $db->fetchAll($select,$params);

find()方法,可以使用主键值在表中检索数据.

// SELECT * FROM round_table WHERE id = "1"
$row = $table->find(1);
// SELECT * FROM round_table WHERE id IN("1", "2", 3")
$rowset = $table->find(array(1, 2, 3));

(2)数据删除总结

第一种方法:可以删任意表

//quoteInto($text, $value, $type = null, $count = null)
$table = 'm_video';// 设定需要删除数据的表
$db = $this->getAdapter();
$where = $db->quoteInto('name = ?', 'ccc');// 删除数据的where条件语句
echo $rows_affected = $db->delete($table, $where);// 删除数据并得到影响的行数

第二种方法:只能删除本表中的

//delete用法
// delete($where)
$where = "name = 'bbb'";
echo $this->delete($where);// 删除数据并得到影响的行数

(3)数据更新总结

第一种方法:可以更新任意表

// 以"列名"=>"数据"的格式构造更新数组,更新数据行
$table = 'm_video';// 更新的数据表
$db = $this->getAdapter();
$set = array (
'name' => '蝶影重重',
'clicks' => '888',
);
$where = $db->quoteInto('id = ?', '10');// where语句
// 更新表数据,返回更新的行数
echo $rows_affected = $db->update($table, $set, $where);

第二种方法:只能更新本表中的

$set = array (
'name' => '蝶影重重22',
'clicks' => '8880',
);
$db = $this->getAdapter();
$where = $db->quoteInto('id = ?', '10');// where语句
$rows_affected = $this->update($set, $where);// 更新表数据,返回更新的行数

(4)数据插入总结

第一种方法:可以在任意表中插入数据

$table = 'm_gao';// 插入数据的数据表
$db = $this->getAdapter();
// 以"列名"=>"数据"的格式格式构造插入数组,插入数据行
$row = array (
'title'   => '大家好。111',
'content' => '影视网要改成用zend framework开发啊',
'time' => '2009-05-04 17:23:36',
);
// 插入数据行并返回插入的行数
$rows_affected = $db->insert($table, $row);
// 最后插入的数据id
echo $last_insert_id = $db->lastInsertId();
$row=array(
'name'=>'curdate()',
'address' => new Zend_Db_Expr ('curdate()')
)

这样子字段name会插入一个curdate()的字符串,而address插入一个时间值(curdate()的结果2009-05-09)

第二种方法:只能适合本表中的还没有总结出来

(5)事务处理

$table = 'm_gao';// 插入数据的数据表
$db = $this->getAdapter();
$db->beginTransaction();//Zend_Db_Adapter会回到自动commit模式下,直到你再次调用 beginTransaction()方法
// 以"列名"=>"数据"的格式格式构造插入数组,插入数据行
$row = array (
'id'=>null,
'title'   => '大家好。111',
'content' => '影视网要改成用zend framework开发啊',
'time' => '2009-05-04 17:23:36',
);
try {
// 插入数据行并返回插入的行数
$rows_affected = $db->insert($table, $row);
// 最后插入的数据id
$last_insert_id = $db->lastInsertId();
$db->commit();// 事务提交
}catch (Exception $e){
$db->rollBack();
echo '捕获异常:'.$e->getMessage();//打出异常信息
}
echo $last_insert_id;

(6)其他

$db = $this->getAdapter();
$tables = $db->listTables(); //列出当前数据库中的所有表
$fields = $db->describeTable('m_video');//列出一个表的字段情况

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

PHP 相关文章推荐
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
PHP之短标签开启设置
Jun 17 PHP
Yii框架form表单用法实例
Dec 04 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 PHP
php注册登录系统简化版
Dec 28 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 PHP
PHP实现的堆排序算法详解
Aug 17 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
Feb 18 #PHP
PHP开发APP端微信支付功能
Feb 17 #PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 #PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
Feb 17 #PHP
PHP常用的三种设计模式
Feb 17 #PHP
轻松实现php文件上传功能
Feb 17 #PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 #PHP
You might like
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
javascript中对对层的控制
2006/12/29 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
微信小程序实现批量倒计时功能
2020/11/01 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
简化Python的Django框架代码的一些示例
2015/04/20 Python
python机器学习之决策树分类详解
2017/12/20 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
pymongo中group by的操作方法教程
2019/03/22 Python
详解python数据结构和算法
2019/04/18 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
家长会主持词开场白
2014/03/18 职场文书
大学生英语演讲稿
2014/04/24 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
护士求职自荐信范文
2015/03/04 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL