Yii学习笔记(数据库操作两大类总结)

<?php
//一、创建数据库连接(以下两种)
//1
$connection=new CDbConnection($dsn,$name,$pass);//依据数据库类型的不同$dns也不一致

//由于CDbConnection继承自CApplicationComponent,一般在数据库中增加以下配置,可以把其当做一个组件使用
//2
'components'=>array(
//其他配置
'db'=>array(
'class'=>'CDbConnection',
'connectionString'=>'mysql:host=localhost;dbname=testdb',
'username'=>'root',
'password'=>'password',
'emulatePrepare'=>true,
),
),
//然后我们可以这样去用了,Yii::app()->db。很方便。


//二、执行我们的sql语句

createCommand()//可以很方便的为我们创建一个CDbCommand实例

$conn = Yii::app()->db;
$sql ="SELECT * FORM `user`";
$command=$connection->createCommand($sql);

//然后sql语句会通过以下两种方式执行
execute()//执行一个无查询SQL语句,INSERT UPDATE DELETE,返回受影响的行数。

query()//查询,如果成功,它将返回CDbDataReader实例,通过此实例可以遍历数据的结果行。但是我们一般使用queryXXX()方法以直接返回查询结果。

$rowCount=$command->execute(); // 执行影响会记录的SQL语句
$dataReader=$command->query(); // 执行一个 SQL 查询,返回CDbDataReader实例
$rows=$command->queryAll(); // 返回所有结果
$row=$command->queryRow(); // 返回第一行
$column=$command->queryColumn(); // 返回第一列
$value=$command->queryScalar(); // 返回第一行的第一个字段

//三、绑定参数

//个人理解绑定参数:就是在一条sql语句中占座,然后当执行sql的时候把参数对号入座。对号的过程中还会验证是否合法。有点像考试安排座位、考场一样,防止替考。

//绑定参数有以下两种方法:
$command->bindParam(":username",$username,PDO::PARAM_STR);//绑定一个PHP变量
$command->bindValue(":user_id",1,PDO::PARAM_INT)//绑定一个参数

//PDO里面有好多预定义常量,放在这可以验证参数的

//表前缀首先设置CDbConnection::tablePrefix,然后在sql语句中使用: {{No Prefix TableName}},这样在sql执行的时候就可以自动组装表前缀

//Query生成器:就是可以使用类的方法和属性生成sql语句的东西。方便快捷还很优美。

$user = Yii::app()->db->createCommand() //创建CDbCommand实例
->select('id, username, profile') //然后开始按照手册倒腾
->from('tbl_user u')
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow(); //走你...
//好处很多,注意一点就是sql语句和query生成器不能混用。
//方法
select(): //指定查询的选择部分
selectDistinct(): //指定查询不重复的选择部分
from(): //指定查询的FROM
where(): //指定查询的WHERE
andWhere(): //用and的方式添加到WHERE的条件中
orWhere(): //用or的方式添加到WHERE的条件中
join(): //添加一个内部联接的查询片段
leftJoin(): //追加一个左外连接查询片段
rightJoin(): //追加一个右外部联接查询片段
crossJoin(): //追加一个交叉连接查询片段
naturalJoin(): //追加一个自然连接查询片段
group(): //指定查询的GROUP BY
having(): //指定查询的HAVING
order(): //指定查询的ORDER BY
limit(): //指定查询的LIMIT
offset(): //指定查询的OFFSET
union(): //添加查询的UNION

//还可以像下面这样用
$row = Yii::app()->db->createCommand(array(
'select' => array('id', 'username'),
'from' => 'tbl_user',
'where' => 'id=:id',
'params' => array(':id'=>1),
))->queryRow();

//同一个CDbCommand实例可以执行多个sql,调用reset就好
$command->reset();

//insert($table, $columns)
//insert()方法的建立和执行一条INSERT SQL语句,$table 参数指定要插入的表,而键值对数组 $columns指定要插入的列的值。
$command->insert('tbl_user', array(
'name'=>'Tester',
'email'=>'tester@example.com',
));

//update($table, $columns, $conditions='', $params=array())
//update()方法的建立和执行一个SQL更新语句。 $table 参数指定要更新的表; $columns是键值对的数组,用于指定要更新的列值的;$conditions 和 $params 像where()一样,指定 UPDATE 语句中的 WHERE 子句。
$command->update('tbl_user', array(
'name'=>'Tester',
), 'id=:id', array(':id'=>1));
//delete($table, $conditions='', $params=array())
//delete()方法的建立和执行一个SQL删除语句。 $table 参数指定要删除数据的表;$conditions 和$params像where()一样,指定 DELETE 语句中的 WHERE 子句。
$command->delete('tbl_user', 'id=:id', array(':id'=>1));


############################################################################################################################################第二大类来临(Active Record)##########################################################################################################################################################

//官方解释:Active Record(AR)是一个流行的对象-关系映射(ORM)技术。每个AR类代表一个数据表(或视图),数据表-列在AR 类中体现为类的属性,一个AR实例则表示表中的一行。常见的CRUD操作作为AR的方法实现。因此我们可以以一种更加面向对象的方式访问数据。
//来个具体的

//首先建立数据库连接,一样的在配置文件里面添加
'components'=>array(
//其他配置
'db'=>array(
'class'=>'CDbConnection',
'connectionString'=>'mysql:host=localhost;dbname=testdb',
'username'=>'root',
'password'=>'password',
'emulatePrepare'=>true,
),
),


//然后用gii生成表对应的model文件,大概样子是这样的

class Post extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}

public function tableName()
{
//如果需要使用表前缀功能return '{{post}}';
return 'tbl_post';
}
}

//然后实例化类 $post = new Post

//1.保存记录

$post=new Post;
$post->title='sample post';
$post->create_time=time();
$post->save();

//2.读取记录

//一条记录 back null

// 查找满足指定条件的结果中的第一行
$post=Post::model()->find($condition,$params);
// 查找具有指定主键值的那一行
$post=Post::model()->findByPk($postID,$condition,$params);
// 查找具有指定属性值的行
$post=Post::model()->findByAttributes($attributes,$condition,$params);
// 通过指定的 SQL 语句查找结果中的第一行
$post=Post::model()->findBySql($sql,$params);

//我也不知道多少条记录 back 空数组

// 查找满足指定条件的所有行
$posts=Post::model()->findAll($condition,$params);
// 查找带有指定主键的所有行
$posts=Post::model()->findAllByPk($postIDs,$condition,$params);
// 查找带有指定属性值的所有行
$posts=Post::model()->findAllByAttributes($attributes,$condition,$params);
// 通过指定的SQL语句查找所有行
$posts=Post::model()->findAllBySql($sql,$params);

//为了应对复杂的使用条件,可以把condition编程一个CDbCriteria实例,它允许我们指定不限于 WHERE 的条件。
$criteria=new CDbCriteria;
$criteria->select='title'; // 只选择 'title' 列
$criteria->condition='postID=:postID';
$criteria->params=array(':postID'=>10);
$post=Post::model()->find($criteria);

//我们还可以给find传一个数组来满足我们的条件:
$post=Post::model()->find(array(
'select'=>'title',
'condition'=>'postID=:postID',
'params'=>array(':postID'=>10),
));

//更新
$post=Post::model()->findByPk(10);
$post->title='new post title';
$post->save();

// 更新符合指定条件的行
Post::model()->updateAll($attributes,$condition,$params);
// 更新符合指定条件和主键的行
Post::model()->updateByPk($pk,$attributes,$condition,$params);
// 更新满足指定条件的行的计数列
Post::model()->updateCounters($counters,$condition,$params);

//删除
$post=Post::model()->findByPk(10); // 假设有一个帖子,其 ID 为 10
$post->delete();

// 删除符合指定条件的行
Post::model()->deleteAll($condition,$params);
// 删除符合指定条件和主键的行
Post::model()->deleteByPk($pk,$condition,$params);

//暂时中止,还有好多要学习,慢慢使用中记住它们》》》...
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值