解析yii数据库的增删查改_php教程-查字典教程网
解析yii数据库的增删查改
解析yii数据库的增删查改
发布时间:2016-12-29 来源:查字典编辑
摘要:1.存取数据库方法存储第一种存表时候用到例子:复制代码代码如下:$post=newPost;$post->title='samplepost...

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'),

);

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新php教程学习
    热门php教程学习
    编程开发子分类