昨天分享了zend framework整合mysql的文章,大家都应该学会了吧,在昨天的文章中也有说到几种基本的查询方式。这次接着分享相关的修改,插入,删除,sql语句查询这几种操作
1.插入数据
插入数据一般不涉及到sql注入的问题,这样就要求客户端和服务端的验证要严谨,zf插入数据直接使用insert就OK了,这个方法需要传入一个关联数组,数组的key就是对应表的列名,步骤是先实例化模型再创建一个关联数组,接着调用insert方法就可以了,代码如下:
$set=array(
"name"=>"测试管理员1",
"remark"=>"1号测试人员"
);
$role->insert($set);
echo "插入数据成功";
来看看数据库里数据插入成功没有
2.删除数据
这个操作更简单直接使用insert方法就行,这个方法可以传入一个where条件
$adapter=$role->getAdapter();
$where=$adapter->quoteInto("name=?", "测试管理员1");
$role->delete($where);
echo "删除成功";
3.更新数据
这种情况直接使用update就行,这个方法需要传入要修改的字段(以数组的形式),以及一个where条件,代码如下
$id=$this->getRequest()->getParam("id");
$role=new RoleModel();
$adapter=$role->getAdapter();
$set=array(
"name"=>"超级管理员"
);
$where=$adapter->quoteInto("id=?", $id);
$role->update($set, $where);
$this->render("updaterole");
这些操作一般都要考虑一下sql注入,这种情况必须使用adapter,quoteinto起到的作用就是转义没有什么特别独特的地方
4.sql语句查询
(1)只带一个参数的查询并考虑注入的方式
$adapter=$u->getAdapter();
//条件查询(防注入方式)
/*$condition=$adapter->quoteInto('id>?', 1)
.$adapter->quoteInto(' and age>?',16);
$result1=$u->fetchAll($condition)->toArray();*/
//sql语句查询只有一个参数的情况(防注入方式)
$sql=$adapter->quoteInto('select * from m_user where id>?',1);
//使用适配器查询fetchAll后面不能加toArray();
$result2=$adapter->query($sql)->fetchAll();
要注意的是如果使用适配器调用query的查询结果已经是数组了,这种sql语句查询用的就多了而且使用特别灵活,不仅支持单表查询还支持多表查询,功能可强大了
(2)多个个参数的查询并考虑注入的方式
//sql语句查询多个参数的情况(防注入方式)--传入的参数顺序不能颠倒
$result3=$adapter->query('select * from m_user where id>? and age>?',array(1,16))->fetchAll();
//sql语句查询多个参数的情况(防注入方式)--传入的参数顺序可以颠倒
$result4=$adapter->query('select * from m_user where id>:id and age>:age',array("age"=>16,"id"=>1))->fetchAll();
这种情况query方法的参数有点多
5.通过主键查询数据
这种情况算是比较简单的一种,但是前提是表必须有主键
//根据主键查询数据--可查询一条或多条
$result5=$u->find(array(5,6))->toArray();
find方法可以传入单个参数,多个的话写成数组
6.查询一条数据
//只取出一条记录
$condition2=$adapter->quoteInto('username>?',"liming");
$result6=$u->fetchRow($condition2)->toArray();
这种情况只会查询出一条数据,而且转换出来的数组是一个一维数组,基本上就这些了