38500 2016-09-02 15:14:58 5401次浏览 0条回复 1 0 0

一、Yii操作数据库的几种选择 1 PDO方式(适合多表连接查询)。

$sql = "";//原生态sql语句 
xx::model()->dbConnection->createCommand($sql)->execute();  非select语句(update、insert、delete)
xx::model()->dbConnection->createCommand($sql)->queryRow(); 查询select一条记录
xx::model()->dbConnection->createCommand($sql)->queryAll(); 查询select多条记录

$sql = "select a.*, count(b.role_id)as num from {{user_role}} a left join {{user}} b on a.id = b.role_id group by b.role_id order by a.id";
$user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll(); 
$this->render("list", array('user_role_info'=>$user_role_info));

比如

$sql = "select a.*, count(b.role_id)as num from slgo_user_role a left join slgo_user b on a.id = b.role_id group by b.role_id order by a.id";
$user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll(); 
$this->render("list", array('user_role_info'=>$user_role_info));

2 Active Record方式 (1)New

$post=new Post; 
$post->title='sample post'; 
$post->content='post body content'; 
$post->save(); 

(2)Criteria方式 也可以使用 $condition 指定更复杂的查询条件。 不使用字符串, 我们可以让 $condition 成为一个 CDbCriteria 的实例, 它允许我们指定不限于 WHERE 的条件。

$criteria=new CDbCriteria; 
$criteria->select='title';  // 只选择 'title' 列 
$criteria->condition='postID=:postID'; 
$criteria->params=array(':postID'=>10); 
$post=Post::model()->find($criteria); 

一种替代 CDbCriteria 的方法是给 find 方法传递一个数组。 数组的键和值各自对应标准(criterion)的属性名和值, 上面的例子可以重 写为如下:

$post=Post::model()->find(array( 
    'select'=>'title', 
    'condition'=>'postID=:postID', 
    'params'=>array(':postID'=>10), 
)); 

当一个查询条件是关于按指定的值匹配几个列时, 我们可以使用 findByAttributes()。我们使 $attributes 参数是一个以列名做索引的值的数组。 在一些框架中, 此任务可以通过调用类似findByNameAndTitle的方法实现。 虽然此方法看起来很诱人, 但它常常引起混淆, 冲突 和比如列名大小写敏感的问题。

3 Query Builder 方式

$user = Yii::app()->db->createCommand() 
    ->select('id, username, profile') 
    ->from('tbl_user u') 
    ->join('tbl_profile p', 'u.id=p.user_id') 
    ->where('id=:id', array(':id'=>$id)) 
    ->queryRow(); 

二、Yii操作数据库的几种选择与mysql_escape_string方法 mysql_escape_string是转义sql中的特殊字符。 1 创建记录时 当直接执行sql时, 需要加mysql_escape_string方法。 当使用yii框架式, 不需要加(因为Yii已经添加验证)。

2 查询记录时 当直接执行sql时, 需要加mysql_escape_string方法。 当使用yii框架式, 如果在find中直接拼接sql, 则也需要添加, 如果使用param数组方式, 不需要加(因为Yii已经添加验证)。

连接数据库的两种方法:

Yii::app()->createCommand($sql)->queryAll();
xxx::model()->dbConnection->createCommand($sql)->queryAll();
    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册