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 SQL Injection with MySQL
Feb 27 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
php判断linux下程序问题实例
Jul 09 PHP
Yii2 GridView实现列表页直接修改数据的方法
May 16 PHP
PHP下载文件的函数实例代码
May 18 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
Jun 02 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
Sep 30 PHP
PHP实现搜索时记住状态的方法示例
May 11 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
Sep 16 PHP
PHP 实现 WebSocket 协议原理与应用详解
Apr 22 PHP
win10下 php安装seaslog扩展的详细步骤
Dec 04 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
PHP explode()函数用法、切分字符串
2012/10/03 PHP
PHP函数extension_loaded()用法实例
2015/01/19 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
PHP强制转化的形式整理
2020/05/22 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
js实现搜索栏效果
2018/11/16 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
python网络爬虫采集联想词示例
2014/02/11 Python
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
高中生的学习总结自我鉴定
2013/10/26 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
MySQL 十大常用字符串函数详解
2021/06/30 MySQL