[zend1.12学习教程5]zend framework常用的数据库操作方法(增删改查)

 Array   高蒙   阅读(1506)   评论(0)   2016-02-25 17:23:16    zend framework数据库操作 zend framework安装 zend framework教程 zend framework学习 


Zend_Db_Table详解

$this->getRequest()->getParam(\'name\'); // 获取表单的数据

$this->getRequest()->getServer(\'REMOTE_ADDR\'); // 获取用户的IP

一、基本的查询语句

 

不考虑SQL注入

// 查询年龄等于18岁的学生

$Models = new Models();

$where = " age = 18";

$logs = $Models->fetchAll($where)->toArray();

 

// 查询前三个学生信息,按照年龄排序

$where = \'1=1\';

$order=\'age\';

$count=3;

$offset=0;

 

$Models = new Models();

$res = $Modles->fetchAll($where,$order,$count,$offset)->toArray();

 

// 显示计算机系的前三个学生信息,按照年龄排序

$where = "dept=\'计算机系\'";

$order=\'age\';

$count=3;

$offset=0;

 

$Models = new Models();

$res = $Modles->fetchAll($where,$order,$count,$offset)->toArray();

 

考虑SQL注入

 

// 显示计算机系前三个学生信息,按照年龄排序(考虑sql注入)

$Models = new Models();

$db= $Models->getAdapter();    // 创建数据库适配器

$where = $db -> quoteInto("dept=?",\'计算机系\');    // 如果\'计算机"系\' 转化成 \'计算机\\"系\'

$res = $Models->fetchAll($where,$order,$count,$offset)->toArray();

 

// 显示计算机系并且是男生的前三个学生信息,按照年龄排序(考虑sql注入)

方法一:

$Models = new Models();

$db = $Models->getAdapter();

$where = $db -> quoteInto("dept=?",\'计算机系\').$db->quoteInto(" and sex=?",\'男\');

$res = $Models -> fetchAll($where,$order,$count,$order)->toArray();

 

方法二:

$Models = new Models();

$db= $Models->getAdapter();

$sql = $db->quoteInto("select * from table where dept=:a and sex=:b",array(

\'a\'=>\'计算机系\',

\'b\'=>\'男\'

));

$res = $db->query($sql)->fetchAll();

 

方法三:

$Models = new Models();

$db= $Models->getAdapter();

$res = $db->query("select * from table where dept=:a and sex=:b",array(

\'a\'=>\'计算机系\',

\'b\'=>\'男\'

))->fetchAll();

 

 

// 取出所有学生的名字和性别

$Models = new Models();

$db = $Models->getAdapter();

$sql = $db->quoteInto(" select name,sex from table");

$res = $db->query($sql)->fetchAll();    // 如果我们使用适配器完成的查询,则返回的数据是数组

 

 

二、 增加、修改、删除 的操作

 

不考虑SQL注入

 

// 添加课程数据

$data = array(

    \'id\'=>1,

    \'name\'=>\'语文\',

    \'num\'=>100

);

$Models = new Models();

$Models->insert($data);

 

// 修改课程数据100改成99

$set = array(

\'num\'=>99

);

$Models = new Models();

$where = " id=1 ";

$Models->update($set,$where);

 

// 删除课程记录

$Models = new Models();

$where = " id=1 ";

$Models->delete($where);

 

// 查询学生号 20160001 这个学生信息  

$Models = new Models();

$res = $Models->find(\'20160001\')->toArray();

 

// 查询学生号 20160001 和 20160002 两个学生信息

$Models = new Models();

$res = $Models->find(array("20160001","20160002"))->toArray();

 

注意:find()方法值根据主键查询

 

考虑SQL注入

 

// 添加课程数据

$data = array(

    \'id\'=>1,

    \'name\'=>\'语文\',

    \'num\'=>100

);

$Models = new Models();

$db = $Models->getAdapter();

$table = "table";

$row = $db->insert($table,$data); // 返回行数

$lastid = $db->lastInsertId(); // 获取最后输入的ID

 

// 修改课程语文数据100改成99

$set = array(

\'num\'=>99

);

$Models = new Models();

$db = $Models->getAdapter();

$table = "table";

$where = $db->quoteInto(\'name=?\',\'语文\');

$row = $db->update($table,$set,$where);    // 返回行数

 

// 删除课程记录

$Models = new Models();

$db = $Models->getAdapter();

$table = "table";

$where = $db->quoteInto(\'name=?\',\'语文\');

$row = $db->delete($table,$where);    返回行数

 

三、 取回查询结果

 

// 如何只取出一条记录

$Models = new Models();

$res = $Models->fetchRow("sex=\'M\'","dept")->toArray();

 

// 取回结果集中所有字段的值,作为连续数组返回

$Models = new Models();

$db = $Models->getAdapter();

$result = $db->fetchAll(

    "SELECT * FROM round_table WHERE noble_title = :title",

    array(\'title\' => \'Sir\')

);

 

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

// 第一个字段作为码

$Models = new Models();

$db = $Models->getAdapter();

$result = $db->fetchAssoc(

    "SELECT * FROM round_table WHERE noble_title = :title",

    array(\'title\' => \'Sir\')

);

 

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

$Models = new Models();

$db = $Models->getAdapter();

$result = $db->fetchCol(

    "SELECT first_name FROM round_table WHERE noble_title = :title",

    array(\'title\' => \'Sir\')

);

 

// 只取回第一个字段值

$Models = new Models();

$db = $Models->getAdapter();

$result = $db->fetchOne(

    "SELECT COUNT(*) FROM round_table WHERE noble_title = :title",

    array(\'title\' => \'Sir\')

);

 

// 取回一个相关数组,第一个字段值为码

// 第二个字段为值

$Models = new Models();

$db = $Models->getAdapter();

$result = $db->fetchPairs(

    "SELECT first_name, favorite_color FROM round_table WHERE noble_title = :title",

    array(\'title\' => \'Sir\')

);

 

// 只取回结果集的第一行

$Models = new Models();

$db = $Models->getAdapter();

$result = $db->fetchRow(

    "SELECT * FROM round_table WHERE first_name = :name",

    array(\'name\' => \'Lancelot\')

);

 

四、distinct、in、order by等其他查询

 

// 查询学校一共多少个系 过滤重复值 distinct

$Models = new Models();

$db = $Models->getAdapter();

$sql = $db->quoteInto(" select distinct dept from table");

$res = $db->query($sql)->fetchAll();

 

// 查询计算机系和外语系的学生信息

$Models = new Models();

$db = $Models->getAdapter();

$res = $db->query("select * from table dept in(\'计算机系\',\'外语系\')")->fetchAll();

 

// 查询各个系学生的平均年龄

$Models = new Models();

$db = $Models->getAdapter();

$res = $db->query("select dept,avg(age) from table group by name")->fetchAll();

 

// 查询显示人数大于3的系的名称

$Models = new Models();

$db = $Models->getAdapter();

$res = $db->query(" select count(dept) num,dept from table group by dept having num > 3 ")->fetchAll();

 

// 查询女生少于200人的系

$Models = new Models();

$db = $Models->getAdapter();

$res = $db->query("select count(*) num,dept from table where sex = \'女\' group by dept having num < 200  ")->fetchAll();

 

// 分页显示

$Models = new Models();

$db = $Models->getAdapter();

$res = showPage(10,2);

public function showPage($pagesize,$pagenow){

        $res = $db->query("select * from table limit $pagenow,$pagesize")->fetchAll();

return $res;

}

 

$Models = new Models();

$db = $Models->getAdapter();

$sql = $db->quoteInto("select max(grade),min(grade) from where table cid=?",11);

$res = $db->query($sql)->fetchAll();

 

// 如果上面的这个语句,我们使用参数绑定,则可以这样写。防止SQL注入。

 

写法一:

$Models = new Models();

$db = $Models->getAdapter();

$sql = $db->quoteInto(" select max(grade),min(grade) from where table cid=?",11").

       $db->quoteInto(" and grade>?",60);

$res = $db->query($sql)->fetchAll();

 

写法二:

$Models = new Models();

$db = $Models->getAdapter();

$sql = $db->query("select max(grade),min(grade) from where table cid=:a and grade>:b",array(

    \'a\'=>11,

    \'b\'=>60

    ))->fetchAll();

 

// 查询所有选择21号课程表的学生信息

$Models = new Models();

$db = $Models->getAdapter();

$res = $db->query("select * from table student in(select sid from studocurse where cid=21)")->fetchAll();

 

什么时候使用tablemodel表模型,什么时候使用Adapter适配器。

简单的原则

1、如果是查询部分字段 Adapter。

2、如果多表查询 Adapter

3、如果考虑sql注入 Adapter $Adapter->query()->fetchAll();

4、如果是增加、删除、修改/查询某张单表的全部字段 tablemodel 表模型 $tableModel->fetchAll()->toArray();

 

参数绑定的好处:

1、可读性好。

2、性能提高。

3、防止SQL注入。

 



相关文章



我要评论


站长昵称:(*)

输入内容:


评论列表


高蒙

男,程序猿一枚

 

人生要是没有理想, 那跟一条咸鱼有什么分别。


关于我

  http://www.shuchengxian.com

高蒙个人博客是以PHP技术为主的程序员个人博客。博客主要发布php开发中遇到的问题以及解决办法,同时个人博客也分享网站模板素材,jquery插件等方面素材。


站点声明:相关侵权、举报、投诉及建议等,请发E-mail:936594075#qq.com(#替换成@)。

Copyright © 2018, www.shuchengxian.com, All rights reserved. 个人博客皖公网安备 34152302000022号 皖ICP备15015490号

关键词:个人博客,PHP博客,PHP博客程序,高蒙博客,高蒙个人博客,php程序员博客,程序员个人博客