解析yii数据库的增删查改
2015-01-24信息快讯网
本篇文章是对yii数据库增删查改进行了详细的分析介绍,需要的朋友参考下
1. 存取数据库方法
存储第一种
存表时候用到
例子:
$post=new Post; $post->title='samplepost'; $post->content='content for thesample post'; $post->createTime=time();/$post->createTime=newCDbexpression_r('NOW()'); $post->save(); $user_field_data= new user_field_data; $user_field_data->flag=0; $user_field_data->user_id=$profile->id; $user_field_data->field_id=$_POST['emailhiden']; $user_field_data->value1=$_POST['email']; $user_field_data->save();
注当一个表存储4次的时候,需要创建4个handle new4次
存储第二种
存储后我们需要找到这条记录的流水id 这样做 $profile = new profile;$profile->id;
存储第三种
用于更加安全的方法,来绑定变量类型 这样可以在同一个表中存储两个记录
$sql="insert intouser_field_data(user_id,field_id,flag,value1)values(:user_id,:field_id,:flag,:value1);"; $command=user_field_data::model()->dbConnection->createCommand($sql); $command->bindParam(":user_id",$profile->id,PDO::PARAM_INT); $command->bindParam(":field_id",$_POST['firstnamehiden'],PDO::PARAM_INT); $command->bindParam(":flag",$tmpflag,PDO::PARAM_INT); $command->bindParam(":value1",$_POST['firstname'],PDO::PARAM_STR); $command->execute(); $command->bindParam(":user_id",$profile->id,PDO::PARAM_INT); $command->bindParam(":field_id",$_POST['emailhiden'],PDO::PARAM_INT); $command->bindParam(":flag",$tmpflag,PDO::PARAM_INT); $command->bindParam(":value1",$_POST['email'],PDO::PARAM_STR); $rowchange =$command->execute(); if( $rowchange != 0){ 修改成功 }//用来判断 注:update delete都可以用这个方法 $sql="delete from profile whereid=:id"; $command=profile::model()->dbConnection->createCommand($sql); $command->bindParam(":id",$userid,PDO::PARAM_INT); $this->rowflag=$command->execute(); $sql="update profile setpass=:pass,role=:role where id=:id"; $command=profile::model()->dbConnection->createCommand($sql); $command->bindParam(":pass",$password,PDO::PARAM_STR); $command->bindParam(":role",$role,PDO::PARAM_INT); $command->bindParam(":id",$userid,PDO::PARAM_INT); $this->rowflag=$command->execute(); // 同理变更updateAll()模式 $sql="update user_field_data set flag =:flag where user_id= :user_id and field_id= :field_id "; 原始sql语句 $criteria = newCDbCriteria; $criteria->condition ='user_id = :user_id and field_id= :field_id'; $criteria->params =array(':user_id' => $userid,':field_id'=> $fieldid); $arrupdate = array('flag'=> $flag); if(user_field_data::model()->updateAll($arrupdate,$criteria)!= 0) { 更新成功后。。。 }
第四种更新和存储应用同一个handle 流程:
先查询记录是否存在,若存在就更新,不存在就新创建
注:1.第一次查询的变量,要跟save()前的变量一致。2.存储时候需要再次 new一下库对象
$user_field_data =user_field_data::model()->findByAttributes( $attributes = array('user_id'=>Yii::app()->user->user_id, 'field_id'=> $key)); if($user_field_data !== null) { $user_field_data->value1= $value; $user_field_data->save(); } else { $user_field_data= new user_field_data; $user_field_data->user_id= Yii::app()->user->user_id; $user_field_data->field_id= $key; $user_field_data->value1= $value; $user_field_data->save(); }
查询
注:当项目没查找到整个对象会为空需要这样判定
if($rows !== null) 当对象不为空 { returntrue; }else{ returnfalse; } SELECT
读表时候用到
例子:
第一种find()
// find thefirst row satisfying the specified condition $post=Post::model()->find($condition,$params); // find the row with postID=10 $post=Post::model()->find('postID=:postID',array(':postID'=>10)); 同样的语句,用另种方式表示 $criteria=new CDbCriteria; $criteria->select='title';// only select the 'title' column $criteria->condition='postID=:postID'; $criteria->params=array(':postID'=>10); $post=Post::model()->find($criteria);// $params is not needed
第二种find()
$post=Post::model()->find(array( 'select'=>'title', 'condition'=>'postID=:postID', 'params'=>array(':postID'=>10), )); // find the row with the specified primarykey $post=Post::model()->findByPk($postID,$condition,$params); // find the row with the specified attributevalues $post=Post::model()->findByAttributes($attributes,$condition,$params);
示例:
第一种findByAttributes()
$checkuser= user_field_data::model()->findByAttributes(
array('user_id' =>Yii::app()->user->user_id, 'field_id'=> $fieldid));
第二种findByAttributes()
$checkuser =user_field_data::model()->findByAttributes(
$attributes = array('user_id'=>Yii::app()->user->user_id, 'field_id'=> $fieldid));
第三种当没有conditions时候,不用params
$user_field_data=user_field_data::model()->findAllByAttributes(
$attributes = array('user_id'=> ':user_id'),
$condition = "field_id in(:fields)",
$params = array(':user_id'=>Yii::app()->user->user_id, ':fields'=> "$rule->dep_fields"));
// find the first row using the specified SQLstatement
$post=Post::model()->findBySql($sql,$params);
例子
user_field_data::model()->findBySql("selectid from user_field_data where user_id = :user_id and field_id =:field_id ", array(':user_id' =>$userid,':field_id'=>$fieldid));
此时回传的是一个对象
第四种 添加其他条件
http://www.yiiframework.com/doc/api/CDbCriteria#limit-detail
$criteria = newCDbCriteria;
$criteria->select='newtime';//选择只显示哪几个字段要与库中名字相同,但是不能COUNT(newtime) as name这样写
$criteria->join = 'LEFT JOINPost ON Post.id=Date.id';//1.先要在relation函数中增加与Post表的关系语句2.Date::model()->with('post')->findAll($criteria)
$criteria->group ='newtime';
$criteria->limit = 2; //都是从0开始,选取几个
$criteria->offset = 2;// 从哪个偏移量开始
print_r(Date::model()->findAll($criteria));
得到行数目或者其他数目 count
// get the number of rows satisfying thespecified condition
$n=Post::model()->count($condition,$params);
// get the number of rows using the specifiedSQL statement
$n=Post::model()->countBySql($sql,$params);
// check if there is at least a row satisfyingthe specified condition
$exists=Post::model()->exists($condition,$params);
UPDATE
例子:
$post=Post::model()->findByPk(10); $post->title='new posttitle'; $post->save(); // save thechange to database // update the rows matching the specifiedcondition Post::model()->updateAll($attributes,$condition,$params);
例子:或者参考上面例子
$c=new CDbCriteria; $c->condition='something=1'; $c->limit=10; $a=array('name'=>'NewName'); Post::model()->updateAll($a,$c); // update the rows matching the specifiedcondition and primary key(s) Post::model()->updateByPk($pk,$attributes,$condition,$params);
例子
$profile =profile::model()->updateByPk( Yii::app()->user->user_id, $attributes = array('pass' =>md5($_POST['password']), 'role' => 1)); // update counter columns in the rowssatisfying the specified conditions Post::model()->updateCounters($counters,$condition,$params);
DELETE
例子:
$post=Post::model()->findByPk(10);// assuming there is a post whose ID is 10 $post->delete(); // delete therow from the database table // delete the rows matching the specifiedcondition Post::model()->deleteAll($condition,$params); // delete the rows matching the specifiedcondition and primary key(s) Post::model()->deleteByPk($pk,$condition,$params); COMPARE
目前可以取出的
1.//$allquestion=field::model()->findAllBySql("selectlabel from field where step_id = :time1 ", array(':time1'=>1));
2. //$criteria=new CDbCriteria;
//$criteria->select='label,options';
//$criteria->condition='step_id=:postID';
//$criteria->params=array(':postID'=>1);
//$allquestion=field::model()->findAll($criteria);
//$allquestion=field::model()->find("",array("label"));
可以与在models文件夹中的 库连接文件relations()函数合用,这样可以联合查询
$criteria=newCDbCriteria;
$criteria->condition='field.step_id=1';
$this->_post=field::model()->with('step')->findAll($criteria);
这样出来的数组里面包含step表中的值,且这个值的条件为step.id=field.step_id
public functionrelations()
{
return array(
'step'=>array(self::BELONGS_TO,'step', 'step_id'),
);
}
YII路径的用法总结
YII实现分页的方法
YII模块实现绑定二级域名的方法
yii操作cookie实例简介
Yii调试SQL的常用方法
php读取纯真ip数据库使用示例
利用phpexcel把excel导入数据库和数据库导出excel实现
php将mysql数据库整库导出生成sql文件的具体实现
php上传图片到指定位置路径保存到数据库的具体实现
PHP数据库链接类(PDO+Access)实例分享
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
在yii中新增一个用户验证的方法详解
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Yii PHP Framework实用入门教程(详细介绍)
深入解析yii权限分级式访问控制的实现(非RBAC法)
PHP 基于Yii框架中使用smarty模板的方法详解
如何利用php array_multisort函数 对数据库结果进行复杂排序
探讨如何把session存入数据库
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
用php制作简单分页(从数据库读取记录)的方法详解