CDbCommand


system.db
继承 class CDbCommand » CComponent
源自 1.0
版本 $Id: CDbCommand.php 3515 2011-12-28 12:29:24Z mdomba $
源码
CDbCommand表示一个针对数据库执行的SQL语句。

它通常通过调用CDbConnection::createCommand创建。 要执行的SQL语句可以通过Text设置。

要执行一条非查询的SQL(如:insert,delete,update),调用execute。 要执行一条SQL语句返回结果数据集(如:SELECT), 使用 query 或它的简便版本 queryRowqueryColumn或者queryScalar

如果一个SQL语句返回结果(比如一个SELECT语句), 结果可以通过已返回的CDbDataReader访问。

CDbCommand支持SQL语句预处理和参数绑定。 调用 bindParam 去绑定一个PHP变量到SQL中的一个参数。 调用 bindValue 去绑定一个值到一个SQL参数。 当绑定一个参数时,此SQL语句将自动准备好。 你也可以调用prepare去明确的准备一条SQL语句。

开始自版本 1.1.6,CDbCommand也能用作一个查询生成器, 从代码片断建立一条SQL语句。例如:
$user = Yii::app()->db->createCommand()
    ->select('username, password')
    ->from('tbl_user')
    ->where('id=:id', array(':id'=>1))
    ->queryRow();

公共属性

属性 类型 描述 定义在
connection CDbConnection 和这个命令相关的连接。 CDbCommand
distinct boolean 返回一个值指示是否SELECT DISTINCT应该被使用。 CDbCommand
from string 返回查询的 FROM 部分。 CDbCommand
group string 返回查询中的 GROUP BY 部分。 CDbCommand
having string 返回查询的HAVING部分。 CDbCommand
join mixed 返回查询的join部分。 CDbCommand
limit string 返回查询的 LIMIT 部分。 CDbCommand
offset string 返回查询的 OFFSET 部分。 CDbCommand
order string 返回查询的 ORDER BY 部分。 CDbCommand
params array 参数(name=>value)被绑定要查询的当前语句。 CDbCommand
pdoStatement PDOStatement 这个命令底层的PDOStatement 如果尚未准备好语句,它可以是null。 CDbCommand
select string 返回查询的SELECT部分。 CDbCommand
text string 返回将被执行的SQL语句。 CDbCommand
union mixed 返回查询的 UNION 部分。 CDbCommand
where string 返回查询的WHERE部分。 CDbCommand

公共方法

方法 描述 定义在
__call() 如果类中没有调的方法名,则调用这个方法。 CComponent
__construct() 构造函数。 CDbCommand
__get() 返回一个属性值、一个事件处理程序列表或一个行为名称。 CComponent
__isset() 检查一个属性是否为null。 CComponent
__set() 设置一个组件的属性值。 CComponent
__sleep() 当序列化时语句声明为null。 CDbCommand
__unset() 设置一个组件的属性为null。 CComponent
addColumn() 绑定并执行一条SQL语句为增加一个新的数据列。 CDbCommand
addForeignKey() 为已经存在的数据表创建一条外键约束的SQL语句。 CDbCommand
alterColumn() 绑定并执行一条SQL语句为改变一个列的定义。 CDbCommand
asa() 返回这个名字的行为对象。 CComponent
attachBehavior() 附加一个行为到组件。 CComponent
attachBehaviors() 附加一个行为列表到组件。 CComponent
attachEventHandler() 为事件附加一个事件处理程序。 CComponent
bindParam() 绑定一个参数到要执行的语句。 CDbCommand
bindValue() 绑定一个值到参数。 CDbCommand
bindValues() 将一个列表的值绑定到相应参数。 CDbCommand
buildQuery() 生成一个SQL SELECT语句从给定查询规范。 CDbCommand
canGetProperty() 确定属性是否可读。 CComponent
canSetProperty() 确定属性是否可写。 CComponent
cancel() 取消SQL语句的执行。 CDbCommand
createIndex() 绑定并执行一条SQL语句为创建一个新索引。 CDbCommand
createTable() 绑定并执行一条SQL语句为创建一个数据表。 CDbCommand
crossJoin() 附加一个CROSS JOIN部分到此查询。 CDbCommand
delete() 创建并执行一条 DELETE SQL 语句。 CDbCommand
detachBehavior() 从组件中分离一个行为。 CComponent
detachBehaviors() 从组件中分离所有行为。 CComponent
detachEventHandler() 分离一个存在的事件处理程序。 CComponent
disableBehavior() 禁用一个附加行为。 CComponent
disableBehaviors() 禁用组件附加的所有行为。 CComponent
dropColumn() 绑定并执行一条SQL语句为删除一个数据列。 CDbCommand
dropForeignKey() 建立一条SQL语句为删除一个外键约束。 CDbCommand
dropIndex() 绑定并执行一条SQL语句为删除一个索引。 CDbCommand
dropTable() 绑定并执行一条SQL语句为删除一个数据表 CDbCommand
enableBehavior() 启用一个附加行为。 CComponent
enableBehaviors() 启用组件附加的所有行为。 CComponent
evaluateExpression() 计算一个PHP表达式,或根据组件上下文执行回调。 CComponent
execute() 执行此 SQL 语句。 CDbCommand
from() 设置查询的FROM部分。 CDbCommand
getConnection() 返回和这个命令相关的连接。 CDbCommand
getDistinct() 返回一个值指示是否SELECT DISTINCT应该被使用。 CDbCommand
getEventHandlers() 返回一个事件的附加处理程序列表。 CComponent
getFrom() 返回查询的 FROM 部分。 CDbCommand
getGroup() 返回查询中的 GROUP BY 部分。 CDbCommand
getHaving() 返回查询的HAVING部分。 CDbCommand
getJoin() 返回查询的join部分。 CDbCommand
getLimit() 返回查询的 LIMIT 部分。 CDbCommand
getOffset() 返回查询的 OFFSET 部分。 CDbCommand
getOrder() 返回查询的 ORDER BY 部分。 CDbCommand
getPdoStatement() 返回这个命令底层的PDOStatement 如果尚未准备好语句,它可以是null。 CDbCommand
getSelect() 返回查询的SELECT部分。 CDbCommand
getText() 返回返回将被执行的SQL语句。 CDbCommand
getUnion() 返回查询的 UNION 部分。 CDbCommand
getWhere() 返回查询的WHERE部分。 CDbCommand
group() 设置查询的 GROUP BY 部分。 CDbCommand
hasEvent() 确定一个事件是否定义。 CComponent
hasEventHandler() 检查事件是否有附加的处理程序。 CComponent
hasProperty() 确定属性是否被定义。 CComponent
having() 设置查询的 HAVING 部分。 CDbCommand
insert() 创建和执行一个SQL语句。 CDbCommand
join() 附加一个INNER JOIN部分到此查询。 CDbCommand
leftJoin() 附加一个LEFT OUTER JOIN部分到此查询。 CDbCommand
limit() 设置查询的 LIMIT 部分。 CDbCommand
naturalJoin() 附加一个NATURAL JOIN 部分到查询。 CDbCommand
offset() 设置查询的 OFFSET 部分。 CDbCommand
order() 设置此查询的ORDER BY部分。 CDbCommand
prepare() 准备要执行的SQL语句。 CDbCommand
query() 执行SQL语句并返回查询结果。 CDbCommand
queryAll() 执行SQL语句并返回所有行。 CDbCommand
queryColumn() 执行SQL语句并返回结果的第一列。 CDbCommand
queryRow() 执行此SQL语句并返回结果的第一行。 CDbCommand
queryScalar() 执行此SQL语句并返回第一行数据的第一列的值。 CDbCommand
raiseEvent() 发起一个事件。 CComponent
renameColumn() 绑定并执行一条SQL语句为重命名一个列。 CDbCommand
renameTable() 绑定并执行一条SQL语句为重命名一个数据表。 CDbCommand
reset() 清理命令,并准备建立一个新的查询。 CDbCommand
rightJoin() 附加一个RIGHT OUTER JOIN部分到此查询。 CDbCommand
select() 设置查询的SELECT部分。 CDbCommand
selectDistinct() 设置此查询的SELECT部分,带有DISTINCT标志开关。 CDbCommand
setDistinct() 设置一个值指示是否SELECT DISTINCT应该被使用。 CDbCommand
setFetchMode() 设置此语句的默认读取模式。 CDbCommand
setFrom() 设置查询的FROM部分。 CDbCommand
setGroup() 设置查询的 GROUP BY 部分。 CDbCommand
setHaving() 设置查询的 HAVING 部分。 CDbCommand
setJoin() 设置查询的join部分。 CDbCommand
setLimit() 设置查询的 LIMIT 部分。 CDbCommand
setOffset() 设置查询的 OFFSET 部分。 CDbCommand
setOrder() 设置查询的 ORDER BY 部分。 CDbCommand
setSelect() 设置的SELECT部分。 CDbCommand
setText() 指定要执行的SQL语句。 CDbCommand
setUnion() 设置查询的 UNION 部分。 CDbCommand
setWhere() 设置查询的 WHERE 部分。 CDbCommand
truncateTable() 绑定并执行一条SQL语句为清空一个数据表。 CDbCommand
union() 附加一个UNION操作符到一个SQL语句。 CDbCommand
update() 创建并执行一条UPDATE SQL语句。 CDbCommand
where() 设置查询的WHERE。 CDbCommand

属性详细

connection 属性 只读

和这个命令相关的连接。

distinct 属性 (可用自 v1.1.6)
public boolean getDistinct()
public void setDistinct(boolean $value)

返回一个值指示是否SELECT DISTINCT应该被使用。

from 属性 (可用自 v1.1.6)
public string getFrom()
public void setFrom(mixed $value)

返回查询的 FROM 部分。

group 属性 (可用自 v1.1.6)
public string getGroup()
public void setGroup(mixed $value)

返回查询中的 GROUP BY 部分。

having 属性 (可用自 v1.1.6)
public string getHaving()
public void setHaving(mixed $value)

返回查询的HAVING部分。

join 属性 (可用自 v1.1.6)
public mixed getJoin()
public void setJoin(mixed $value)

返回查询的join部分。

limit 属性 (可用自 v1.1.6)
public string getLimit()
public void setLimit(integer $value)

返回查询的 LIMIT 部分。

offset 属性 (可用自 v1.1.6)
public string getOffset()
public void setOffset(integer $value)

返回查询的 OFFSET 部分。

order 属性 (可用自 v1.1.6)
public string getOrder()
public void setOrder(mixed $value)

返回查询的 ORDER BY 部分。

params 属性 (可用自 v1.1.6)
public array $params;

参数(name=>value)被绑定要查询的当前语句。

pdoStatement 属性 只读
public PDOStatement getPdoStatement()

这个命令底层的PDOStatement 如果尚未准备好语句,它可以是null。

select 属性 (可用自 v1.1.6)
public string getSelect()
public void setSelect(mixed $value)

返回查询的SELECT部分。

text 属性
public string getText()
public CDbCommand setText(string $value)

返回将被执行的SQL语句。

union 属性 (可用自 v1.1.6)
public mixed getUnion()
public void setUnion(mixed $value)

返回查询的 UNION 部分。

where 属性 (可用自 v1.1.6)
public string getWhere()
public void setWhere(mixed $value)

返回查询的WHERE部分。

方法详细

__construct() 方法
public void __construct(CDbConnection $connection, mixed $query=NULL)
$connection CDbConnection 数据库连接
$query mixed 要执行的数据库查询。这个可以是代表SQL语句的一个字符串或一个数组, 它的键名-键值对将被用作设置, 创建相应对象命令的属性。

例如,你能传递 ‘SELECT * FROM tbl_user’array(‘select’=>‘*’,‘from’=>‘tbl_user’)。 他们最终的查询结果等同。

当传递查询为一个数组时,通常要设置下面的属性: selectdistinctfromwherejoingrouphavingorderlimitoffsetunion。 请参考这些属性每个设置的更多细节。 关于验证属性。这个功能可用自版本 1.1.6。

自 1.1.7 通过设置FetchMode使用一个特定的数据获取模式是可能的。参见http://www.php.net/manual/en/function.PDOStatement-setFetchMode.php 为更多详细信息。
public function __construct(CDbConnection $connection,$query=null)
{
    
$this->_connection=$connection;
    if(
is_array($query))
    {
        foreach(
$query as $name=>$value)
            
$this->$name=$value;
    }
    else
        
$this->setText($query);
}

构造函数。

__sleep() 方法
public array __sleep()
{return} array
public function __sleep()
{
    
$this->_statement=null;
    return 
array_keys(get_object_vars($this));
}

当序列化时语句声明为null。

addColumn() 方法 (可用自 v1.1.6)
public integer addColumn(string $table, string $column, string $type)
$table string 新列将被添加进去的表。此表名将被此方法恰当的引用。
$column string 新列的名称。此名称将被该方法恰当的引用。
$type string 列类型,getColumnType方法将被触发转换抽象的列类型(若有)为实际类型。 任何不能识别的抽象类型将保持在生成的SQL中。 例如,'string'将被转换成'varchar(255)', 同时 'string not null' 将变成 'varchar(255) not null'.
{return} integer 返回此操作影响的行数。
public function addColumn($table$column$type)
{
    return 
$this->setText($this->getConnection()->getSchema()->addColumn($table$column$type))->execute();
}

绑定并执行一条SQL语句为增加一个新的数据列。

addForeignKey() 方法 (可用自 v1.1.6)
public integer addForeignKey(string $name, string $table, string $columns, string $refTable, string $refColumns, string $delete=NULL, string $update=NULL)
$name string 外键结束的名称。
$table string 外键结束将被添加进去的表。
$columns string 约束将被添加到的表名。如果有多列,用逗号分开它们。
$refTable string 外键引用的表。
$refColumns string 外键引用的列的名称。如果有多列,用逗号分开它们。
$delete string ON DELETE 选项。 大部分 DBMS 支持这个选项: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL
$update string ON UPDATE 选项。 大部分 DBMS 支持这个选项: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL
{return} integer 返回此操作影响的行数。
public function addForeignKey($name$table$columns$refTable$refColumns$delete=null$update=null)
{
    return 
$this->setText($this->getConnection()->getSchema()->addForeignKey($name$table$columns$refTable$refColumns$delete$update))->execute();
}

为已经存在的数据表创建一条外键约束的SQL语句。 这个方法将恰当的引用此列和列名。

alterColumn() 方法 (可用自 v1.1.6)
public integer alterColumn(string $table, string $column, string $type)
$table string 列将被改变的表。表名将被这个方法恰当的引用。
$column string 要更改的列的名称。此名称将被该方法恰当的引用。
$type string 新列的类型。getColumnType 方法将被触发转换抽象列类型(若有) 为实际类型。任何无法识别的抽象类型将被保持在已经生成的SQL中。 例如,'string' 将被转换成 'varchar(255)', 同时 'string not null' 将变成 'varchar(255) not null'。
{return} integer 返回此操作影响的行数。
public function alterColumn($table$column$type)
{
    return 
$this->setText($this->getConnection()->getSchema()->alterColumn($table$column$type))->execute();
}

绑定并执行一条SQL语句为改变一个列的定义。

bindParam() 方法
public CDbCommand bindParam(mixed $name, mixed &$value, integer $dataType=NULL, integer $length=NULL, mixed $driverOptions=NULL)
$name mixed 参数标识符。 对于一个使用命名占位符的预准备语句,这将是一个表单名称参数:name。 对于一个使用问号占位符的预准备语句, 这将是一个从1开始的参数位置索引。
$value mixed 绑定到SQL语句参数的PHP变量。
$dataType integer 参数的SQL数据类型。如果为null,此类型由PHP值的类型决定。
$length integer 数据类型的长度
$driverOptions mixed 指定的驱动选项(自版本1.1.6可用)
{return} CDbCommand 当前要执行的命令
public function bindParam($name, &$value$dataType=null$length=null$driverOptions=null)
{
    
$this->prepare();
    if(
$dataType===null)
        
$this->_statement->bindParam($name,$value,$this->_connection->getPdoType(gettype($value)));
    else if(
$length===null)
        
$this->_statement->bindParam($name,$value,$dataType);
    else if(
$driverOptions===null)
        
$this->_statement->bindParam($name,$value,$dataType,$length);
    else
        
$this->_statement->bindParam($name,$value,$dataType,$length,$driverOptions);
    
$this->_paramLog[$name]=&$value;
    return 
$this;
}

绑定一个参数到要执行的语句。

bindValue() 方法
public CDbCommand bindValue(mixed $name, mixed $value, integer $dataType=NULL)
$name mixed 参数标签符。 对于一个使用命名占位符的预准备语句, 这将是一个表单名称参数:name, 对于一个使用问号占位符的预准备语句, 这将是一个从1开始的参数位置索引。
$value mixed 绑定到此参数的值
$dataType integer 参数的SQL数据类型。如果为null,此类型由PHP值的类型决定。
{return} CDbCommand 当前要执行的命令
public function bindValue($name$value$dataType=null)
{
    
$this->prepare();
    if(
$dataType===null)
        
$this->_statement->bindValue($name,$value,$this->_connection->getPdoType(gettype($value)));
    else
        
$this->_statement->bindValue($name,$value,$dataType);
    
$this->_paramLog[$name]=$value;
    return 
$this;
}

绑定一个值到参数。

bindValues() 方法 (可用自 v1.1.5)
public CDbCommand bindValues(array $values)
$values array 要被绑定的值。 这个必须由相应的数组键给定参数名,数组值给定参数值。 例如, array(‘:name’=>‘John’, ‘:age’=>25).
{return} CDbCommand 返回当前将执行的命令
public function bindValues($values)
{
    
$this->prepare();
    foreach(
$values as $name=>$value)
    {
        
$this->_statement->bindValue($name,$value,$this->_connection->getPdoType(gettype($value)));
        
$this->_paramLog[$name]=$value;
    }
    return 
$this;
}

将一个列表的值绑定到相应参数。 除了绑定多个值外,这个和 bindValue 是相似的。 注意每个值的SQL数据类型是由PHP类型决定。

buildQuery() 方法 (可用自 v1.1.6)
public string buildQuery(array $query)
$query array 名称-值对查询规范。 下面的查询选项被支持。:selectdistinctfromwherejoin, group, having, orderlimitoffsetunion
{return} string 返回SQL语句
public function buildQuery($query)
{
    
$sql=isset($query['distinct']) && $query['distinct'] ? 'SELECT DISTINCT' 'SELECT';
    
$sql.=' '.(isset($query['select']) ? $query['select'] : '*');

    if(isset(
$query['from']))
        
$sql.="\nFROM ".$query['from'];
    else
        throw new 
CDbException(Yii::t('yii','The DB query must contain the "from" portion.'));

    if(isset(
$query['join']))
        
$sql.="\n".(is_array($query['join']) ? implode("\n",$query['join']) : $query['join']);

    if(isset(
$query['where']))
        
$sql.="\nWHERE ".$query['where'];

    if(isset(
$query['group']))
        
$sql.="\nGROUP BY ".$query['group'];

    if(isset(
$query['having']))
        
$sql.="\nHAVING ".$query['having'];

    if(isset(
$query['order']))
        
$sql.="\nORDER BY ".$query['order'];

    
$limit=isset($query['limit']) ? (int)$query['limit'] : -1;
    
$offset=isset($query['offset']) ? (int)$query['offset'] : -1;
    if(
$limit>=|| $offset>0)
        
$sql=$this->_connection->getCommandBuilder()->applyLimit($sql,$limit,$offset);

    if(isset(
$query['union']))
        
$sql.="\nUNION (\n".(is_array($query['union']) ? implode("\n) UNION (\n",$query['union']) : $query['union']) . ')';

    return 
$sql;
}

生成一个SQL SELECT语句从给定查询规范。

cancel() 方法
public void cancel()
public function cancel()
{
    
$this->_statement=null;
}

取消SQL语句的执行。

createIndex() 方法 (可用自 v1.1.6)
public integer createIndex(string $name, string $table, string $column, boolean $unique=false)
$name string 索引的名称。此名称将被该方法恰当的引用。
$table string 要为其创建新索引的表。表名将这个方法恰当的引用。
$column string 被包含在索引中的列。如果有多列,请用逗号分开它们。 此列名将被该方法恰当的引用。
$unique boolean 是否在创建索引时增加UNIQUE约束。
{return} integer 返回此操作影响的行数。
public function createIndex($name$table$column$unique=false)
{
    return 
$this->setText($this->getConnection()->getSchema()->createIndex($name$table$column$unique))->execute();
}

绑定并执行一条SQL语句为创建一个新索引。

createTable() 方法 (可用自 v1.1.6)
public integer createTable(string $table, array $columns, string $options=NULL)
$table string 被创建的表的名称。此名称将被该方法恰当的引用。
$columns array 新表中的列(name=>definition)。
$options string 额外的SQL片段,将附加到生成的SQL中。
{return} integer 返回此操作影响的行数。
public function createTable($table$columns$options=null)
{
    return 
$this->setText($this->getConnection()->getSchema()->createTable($table$columns$options))->execute();
}

绑定并执行一条SQL语句为创建一个数据表。

应将新表中的列指定为名称-定义对(例如'name'=>'string'), 这里 name 代表一个列名,它将被这个方法恰当的引用,而 definition 代表列的类型,它能包含一个抽象的DB类型。 getColumnType 方法将被触发转换任何抽象类型为一个实际类型。

如果仅指定了列的定义(例如 'PRIMARY KEY (name, type)'),它将被直接插入 生成的 SQL中。

crossJoin() 方法 (可用自 v1.1.6)
public CDbCommand crossJoin(string $table)
$table string 要被连接的表。 表可包含schema前缀(例如 ‘public.tbl_user’)和/或 表别名 (例如 ‘tbl_user u’)。 这个方法将自动的引用此表名,除非它包含一些圆括号 (这意味着此表被给定作为一个子查询或DB表达式)。
{return} CDbCommand 返回此命令对象本身
public function crossJoin($table)
{
    return 
$this->joinInternal('cross join'$table);
}

附加一个CROSS JOIN部分到此查询。 注意不是所有的DBMS都支持CROSS JOIN.

delete() 方法 (可用自 v1.1.6)
public integer delete(string $table, mixed $conditions='', array $params=array ( ))
$table string 数据将要被删除的表。
$conditions mixed 将被放入WHERE 部分的条件。 请参考where关于怎样指定条件。
$params array 被绑定到查询的参数。
{return} integer 返回此操作影响的行数。
public function delete($table$conditions=''$params=array())
{
    
$sql='DELETE FROM ' $this->_connection->quoteTableName($table);
    if((
$where=$this->processConditions($conditions))!='')
        
$sql.=' WHERE '.$where;
    return 
$this->setText($sql)->execute($params);
}

创建并执行一条 DELETE SQL 语句。

dropColumn() 方法 (可用自 v1.1.6)
public integer dropColumn(string $table, string $column)
$table string 列将被删除的表,此名称将被该方法恰当的引用。
$column string 将被删除的列的名称。此名称将被该方法恰当的引用。
{return} integer 返回此操作影响的行数。
public function dropColumn($table$column)
{
    return 
$this->setText($this->getConnection()->getSchema()->dropColumn($table$column))->execute();
}

绑定并执行一条SQL语句为删除一个数据列。

dropForeignKey() 方法 (可用自 v1.1.6)
public integer dropForeignKey(string $name, string $table)
$name string 要被删除的外键约束名称。此名称将被该方法恰当的引用。
$table string 要被删除的外键的表。此名称将被该方法恰当的引用。
{return} integer 返回此操作影响的行数。
public function dropForeignKey($name$table)
{
    return 
$this->setText($this->getConnection()->getSchema()->dropForeignKey($name$table))->execute();
}

建立一条SQL语句为删除一个外键约束。

dropIndex() 方法 (可用自 v1.1.6)
public integer dropIndex(string $name, string $table)
$name string 要删除的索引名称。此名称将被该方法恰当的引用。
$table string 索引要被删除的表。此名称将被该方法恰当的引用。
{return} integer 返回此操作影响的行数。
public function dropIndex($name$table)
{
    return 
$this->setText($this->getConnection()->getSchema()->dropIndex($name$table))->execute();
}

绑定并执行一条SQL语句为删除一个索引。

dropTable() 方法 (可用自 v1.1.6)
public integer dropTable(string $table)
$table string 要删除的表。此名称将被该方法恰当的引用。
{return} integer 返回此操作影响的行数。
public function dropTable($table)
{
    return 
$this->setText($this->getConnection()->getSchema()->dropTable($table))->execute();
}

绑定并执行一条SQL语句为删除一个数据表

execute() 方法
public integer execute(array $params=array ( ))
$params array 为SQL执行的输入参数 (name=>value)。 对于bindParambindValue这是二选一的。 如果你有多个输入参数,用这种方式传递他们能提高性能。 注意,如果你用这种方式传递参数,你不能使用 bindParam或者bindValue绑定参数或值, 反之亦然,这样可以提高性能。
{return} integer 返回此操作影响的行数。
public function execute($params=array())
{
    if(
$this->_connection->enableParamLogging && ($pars=array_merge($this->_paramLog,$params))!==array())
    {
        
$p=array();
        foreach(
$pars as $name=>$value)
            
$p[$name]=$name.'='.var_export($value,true);
        
$par='. Bound with ' .implode(', ',$p);
    }
    else
        
$par='';
    
Yii::trace('Executing SQL: '.$this->getText().$par,'system.db.CDbCommand');
    try
    {
        if(
$this->_connection->enableProfiling)
            
Yii::beginProfile('system.db.CDbCommand.execute('.$this->getText().')','system.db.CDbCommand.execute');

        
$this->prepare();
        if(
$params===array())
            
$this->_statement->execute();
        else
            
$this->_statement->execute($params);
        
$n=$this->_statement->rowCount();

        if(
$this->_connection->enableProfiling)
            
Yii::endProfile('system.db.CDbCommand.execute('.$this->getText().')','system.db.CDbCommand.execute');

        return 
$n;
    }
    catch(
Exception $e)
    {
        if(
$this->_connection->enableProfiling)
            
Yii::endProfile('system.db.CDbCommand.execute('.$this->getText().')','system.db.CDbCommand.execute');
        
$errorInfo $e instanceof PDOException $e->errorInfo null;
        
$message $e->getMessage();
        
Yii::log(Yii::t('yii','CDbCommand::execute() failed: {error}. The SQL statement executed was: {sql}.',
            array(
'{error}'=>$message'{sql}'=>$this->getText().$par)),CLogger::LEVEL_ERROR,'system.db.CDbCommand');
        if(
YII_DEBUG)
            
$message .= '. The SQL statement executed was: '.$this->getText().$par;
        throw new 
CDbException(Yii::t('yii','CDbCommand failed to execute the SQL statement: {error}',
            array(
'{error}'=>$message)),(int)$e->getCode(),$errorInfo);
    }
}

执行此 SQL 语句。 此方法意味着只执行 non-query SQL 语句。 将不返回结果集。

from() 方法 (可用自 v1.1.6)
public CDbCommand from(mixed $tables)
$tables mixed from选择的表(可能是多个)。这个可能是一个字符串(例如 'tbl_user') 或一个数组 (例如 array('tbl_user', 'tbl_profile')) 指定一个或多个表名。 表名能包含schema前缀 (例如 'public.tbl_user') 和/或 表别名 (例如 'tbl_user u'). 此方法将自动的引用此表名,除非它包含一些圆括号 (这意味着此表被给定作为一个子查询或DB表达式).
{return} CDbCommand 返回此命令对象本身
public function from($tables)
{
    if(
is_string($tables) && strpos($tables,'(')!==false)
        
$this->_query['from']=$tables;
    else
    {
        if(!
is_array($tables))
            
$tables=preg_split('/\s*,\s*/',trim($tables),-1,PREG_SPLIT_NO_EMPTY);
        foreach(
$tables as $i=>$table)
        {
            if(
strpos($table,'(')===false)
            {
                if(
preg_match('/^(.*?)(?i:\s+as\s+|\s+)(.*)$/',$table,$matches))  // with alias
                    
$tables[$i]=$this->_connection->quoteTableName($matches[1]).' '.$this->_connection->quoteTableName($matches[2]);
                else
                    
$tables[$i]=$this->_connection->quoteTableName($table);
            }
        }
        
$this->_query['from']=implode(', ',$tables);
    }
    return 
$this;
}

设置查询的FROM部分。

getConnection() 方法
public CDbConnection getConnection()
{return} CDbConnection 和这个命令相关的连接。
public function getConnection()
{
    return 
$this->_connection;
}

getDistinct() 方法 (可用自 v1.1.6)
public boolean getDistinct()
{return} boolean 返回一个值指示是否SELECT DISTINCT应该被使用。
public function getDistinct()
{
    return isset(
$this->_query['distinct']) ? $this->_query['distinct'] : false;
}

返回一个值指示是否SELECT DISTINCT应该被使用。

getFrom() 方法 (可用自 v1.1.6)
public string getFrom()
{return} string 查询的FROM部分(没有 'FROM' )。
public function getFrom()
{
    return isset(
$this->_query['from']) ? $this->_query['from'] : '';
}

返回查询的 FROM 部分。

getGroup() 方法 (可用自 v1.1.6)
public string getGroup()
{return} string 返回查询中的 GROUP BY 部分 (没有 ‘GROUP BY’ )。
public function getGroup()
{
    return isset(
$this->_query['group']) ? $this->_query['group'] : '';
}

返回查询中的 GROUP BY 部分。

getHaving() 方法 (可用自 v1.1.6)
public string getHaving()
{return} string 返回查询的HAVING部分(没有 'HAVING' ) 。
public function getHaving()
{
    return isset(
$this->_query['having']) ? $this->_query['having'] : '';
}

返回查询的HAVING部分。

getJoin() 方法 (可用自 v1.1.6)
public mixed getJoin()
{return} mixed 查询的join。 这个可以是一个数组表示多个join片断,或一个字符串表示单个join片断。 每一个join片断将包含恰当的join操作符(例如 LEFT JOIN)。
public function getJoin()
{
    return isset(
$this->_query['join']) ? $this->_query['join'] : '';
}

返回查询的join部分。

getLimit() 方法 (可用自 v1.1.6)
public string getLimit()
{return} string 返回查询的 LIMIT 部分(没有 'LIMIT')。
public function getLimit()
{
    return isset(
$this->_query['limit']) ? $this->_query['limit'] : -1;
}

返回查询的 LIMIT 部分。

getOffset() 方法 (可用自 v1.1.6)
public string getOffset()
{return} string 查询的OFFSET部分(没有'OFFSET' )。
public function getOffset()
{
    return isset(
$this->_query['offset']) ? $this->_query['offset'] : -1;
}

返回查询的 OFFSET 部分。

getOrder() 方法 (可用自 v1.1.6)
public string getOrder()
{return} string 返回查询中的ORDER BY部分(没有 'ORDER BY' )。
public function getOrder()
{
    return isset(
$this->_query['order']) ? $this->_query['order'] : '';
}

返回查询的 ORDER BY 部分。

getPdoStatement() 方法
public PDOStatement getPdoStatement()
{return} PDOStatement 这个命令底层的PDOStatement 如果尚未准备好语句,它可以是null。
public function getPdoStatement()
{
    return 
$this->_statement;
}

getSelect() 方法 (可用自 v1.1.6)
public string getSelect()
{return} string 查询的SELECT部分(没有'SELECT')
public function getSelect()
{
    return isset(
$this->_query['select']) ? $this->_query['select'] : '';
}

返回查询的SELECT部分。

getText() 方法
public string getText()
{return} string 返回将被执行的SQL语句。
public function getText()
{
    if(
$this->_text=='' && !empty($this->_query))
        
$this->setText($this->buildQuery($this->_query));
    return 
$this->_text;
}

getUnion() 方法 (可用自 v1.1.6)
public mixed getUnion()
{return} mixed 查询的UNION部分(没有'UNION' )。 它可以是一个字符串或一个数组(表示多个union)部分。
public function getUnion()
{
    return isset(
$this->_query['union']) ? $this->_query['union'] : '';
}

返回查询的 UNION 部分。

getWhere() 方法 (可用自 v1.1.6)
public string getWhere()
{return} string 查询的WHERE部分 (没有 'WHERE' )。
public function getWhere()
{
    return isset(
$this->_query['where']) ? $this->_query['where'] : '';
}

返回查询的WHERE部分。

group() 方法 (可用自 v1.1.6)
public CDbCommand group(mixed $columns)
$columns mixed 将被分组的列。 被指定的列可能是一个字符串(例如 "id, name")或者一个数组(例如 array('id', 'name')). 这个方法将自动的引用此列名,除非一个列包含一些圆括号, (这意味着此列包含一个DB表达式)。
{return} CDbCommand 返回此命令对象本身
public function group($columns)
{
    if(
is_string($columns) && strpos($columns,'(')!==false)
        
$this->_query['group']=$columns;
    else
    {
        if(!
is_array($columns))
            
$columns=preg_split('/\s*,\s*/',trim($columns),-1,PREG_SPLIT_NO_EMPTY);
        foreach(
$columns as $i=>$column)
        {
            if(
is_object($column))
                
$columns[$i]=(string)$column;
            else if(
strpos($column,'(')===false)
                
$columns[$i]=$this->_connection->quoteColumnName($column);
        }
        
$this->_query['group']=implode(', ',$columns);
    }
    return 
$this;
}

设置查询的 GROUP BY 部分。

having() 方法 (可用自 v1.1.6)
public CDbCommand having(mixed $conditions, array $params=array ( ))
$conditions mixed 放在HAVING后的条件。 请参考where关于怎样指定条件。
$params array 绑定到此查询的参数 (name=>value)
{return} CDbCommand 返回此命令对象本身
public function having($conditions$params=array())
{
    
$this->_query['having']=$this->processConditions($conditions);
    foreach(
$params as $name=>$value)
        
$this->params[$name]=$value;
    return 
$this;
}

设置查询的 HAVING 部分。

insert() 方法 (可用自 v1.1.6)
public integer insert(string $table, array $columns)
$table string 将被插入的表。
$columns array 要插入表的列数据(name=>value)。
{return} integer 返回此执行影响的行数。
public function insert($table$columns)
{
    
$params=array();
    
$names=array();
    
$placeholders=array();
    foreach(
$columns as $name=>$value)
    {
        
$names[]=$this->_connection->quoteColumnName($name);
        if(
$value instanceof CDbExpression)
        {
            
$placeholders[] = $value->expression;
            foreach(
$value->params as $n => $v)
                
$params[$n] = $v;
        }
        else
        {
            
$placeholders[] = ':' $name;
            
$params[':' $name] = $value;
        }
    }
    
$sql='INSERT INTO ' $this->_connection->quoteTableName($table)
        . 
' (' implode(', ',$names) . ') VALUES ('
        
implode(', '$placeholders) . ')';
    return 
$this->setText($sql)->execute($params);
}

创建和执行一个SQL语句。 该方法将恰当的转义列名,并绑定要插入的值。

join() 方法 (可用自 v1.1.6)
public CDbCommand join(string $table, mixed $conditions, array $params=array ( ))
$table string 要被连接的表。 表可包含schema前缀(例如 'public.tbl_user')和/或 表别名 (例如 'tbl_user u')。 这个方法将自动的引用此表名,除非它包含一些圆括号 (这意味着此表被给定作为一个子查询或DB表达式)。
$conditions mixed 出现在ON部分的join条件。 请参考where关于怎样指定条件。
$params array 绑定到此查询的参数 (name=>value)
{return} CDbCommand 返回此命令对象本身
public function join($table$conditions$params=array())
{
    return 
$this->joinInternal('join'$table$conditions$params);
}

附加一个INNER JOIN部分到此查询。

leftJoin() 方法 (可用自 v1.1.6)
public CDbCommand leftJoin(string $table, mixed $conditions, array $params=array ( ))
$table string 要被连接的表。 表可包含schema前缀(例如 ‘public.tbl_user’)和/或 表别名 (例如 ‘tbl_user u’)。 这个方法将自动的引用此表名,除非它包含一些圆括号 (这意味着此表被给定作为一个子查询或DB表达式)。
$conditions mixed 出现在ON部分的join条件。 请参考where关于怎样指定条件。
$params array 绑定到此查询的参数 (name=>value)
{return} CDbCommand 返回此命令对象本身
public function leftJoin($table$conditions$params=array())
{
    return 
$this->joinInternal('left join'$table$conditions$params);
}

附加一个LEFT OUTER JOIN部分到此查询。

limit() 方法 (可用自 v1.1.6)
public CDbCommand limit(integer $limit, integer $offset=NULL)
$limit integer limit值
$offset integer offset值
{return} CDbCommand 返回此命令对象本身
public function limit($limit$offset=null)
{
    
$this->_query['limit']=(int)$limit;
    if(
$offset!==null)
        
$this->offset($offset);
    return 
$this;
}

设置查询的 LIMIT 部分。

naturalJoin() 方法 (可用自 v1.1.6)
public CDbCommand naturalJoin(string $table)
$table string 要被连接的表。 表可包含schema前缀(例如 ‘public.tbl_user’)和/或 表别名 (例如 ‘tbl_user u’)。 这个方法将自动的引用此表名,除非它包含一些圆括号 (这意味着此表被给定作为一个子查询或DB表达式)。
{return} CDbCommand 返回此命令对象本身
public function naturalJoin($table)
{
    return 
$this->joinInternal('natural join'$table);
}

附加一个NATURAL JOIN 部分到查询。 注意不是所有的DBMS都支持NATURAL JOIN.

offset() 方法 (可用自 v1.1.6)
public CDbCommand offset(integer $offset)
$offset integer offset值
{return} CDbCommand 返回此命令对象本身
public function offset($offset)
{
    
$this->_query['offset']=(int)$offset;
    return 
$this;
}

设置查询的 OFFSET 部分。

order() 方法 (可用自 v1.1.6)
public CDbCommand order(mixed $columns)
$columns mixed 要被排序的列(和方向)。 指定的列或者是一个字符串(例如 "id ASC, name DESC")或者一个数组(例如 array('id ASC', 'name DESC'))。 这个方法将自动的引用此列名,除非一个列包含一些圆括号, (这意味着此列包含一个DB表达式)。
{return} CDbCommand 返回此命令对象本身
public function order($columns)
{
    if(
is_string($columns) && strpos($columns,'(')!==false)
        
$this->_query['order']=$columns;
    else
    {
        if(!
is_array($columns))
            
$columns=preg_split('/\s*,\s*/',trim($columns),-1,PREG_SPLIT_NO_EMPTY);
        foreach(
$columns as $i=>$column)
        {
            if(
is_object($column))
                
$columns[$i]=(string)$column;
            else if(
strpos($column,'(')===false)
            {
                if(
preg_match('/^(.*?)\s+(asc|desc)$/i',$column,$matches))
                    
$columns[$i]=$this->_connection->quoteColumnName($matches[1]).' '.strtoupper($matches[2]);
                else
                    
$columns[$i]=$this->_connection->quoteColumnName($column);
            }
        }
        
$this->_query['order']=implode(', ',$columns);
    }
    return 
$this;
}

设置此查询的ORDER BY部分。

prepare() 方法
public void prepare()
public function prepare()
{
    if(
$this->_statement==null)
    {
        try
        {
            
$this->_statement=$this->getConnection()->getPdoInstance()->prepare($this->getText());
            
$this->_paramLog=array();
        }
        catch(
Exception $e)
        {
            
Yii::log('Error in preparing SQL: '.$this->getText(),CLogger::LEVEL_ERROR,'system.db.CDbCommand');
            
$errorInfo $e instanceof PDOException $e->errorInfo null;
            throw new 
CDbException(Yii::t('yii','CDbCommand failed to prepare the SQL statement: {error}',
                array(
'{error}'=>$e->getMessage())),(int)$e->getCode(),$errorInfo);
        }
    }
}

准备要执行的SQL语句。 对于要多次执行的复杂的SQL语句, 这个可以提高性能。 对于绑定了参数的SQL语句, 这个方法会被自动触发。

query() 方法
public CDbDataReader query(array $params=array ( ))
$params array 为SQL执行的输入基数 (name=>value)。 这是bindParambindValue二选一的。 如果你有多个输入参数,用这种方式传递它们能提高性能。 注意如果你用这种方式传递参数,你不能使用 bindParambindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。
{return} CDbDataReader 获取查询结果的读取器对象
public function query($params=array())
{
    return 
$this->queryInternal('',0,$params);
}

执行SQL语句并返回查询结果。 此方法执行返回结果集的SQL查询。

queryAll() 方法
public array queryAll(boolean $fetchAssociative=true, array $params=array ( ))
$fetchAssociative boolean 是否每一行应该被作为一个关联数组返回, 关联数组的列名为键或列索引作为键(从0开始)。
$params array SQL执行的输入参数(name=>value)。这是 bindParambindValue二选一的。如果你有多个输入参数, 用这种方式传递它们能提高性能。注意如果你用这种方式传递参数, 你不能使用 bindParambindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。
{return} array 返回查询结果中的所有行。每个数组元素是一个数组,表示一行。 如果查询结果为空,返回空数组。
public function queryAll($fetchAssociative=true,$params=array())
{
    return 
$this->queryInternal('fetchAll',$fetchAssociative $this->_fetchMode PDO::FETCH_NUM$params);
}

执行SQL语句并返回所有行。

queryColumn() 方法
public array queryColumn(array $params=array ( ))
$params array SQL执行的输入参数(name=>value)。这是 bindParambindValue二选一的。 如果你有多个输入参数, 用这种方式传递它们能提高性能。注意如果你用这种方式传递参数, 你不能使用 bindParambindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。
{return} array 返回查询结果的第一列。 如果没有结果为空数组。
public function queryColumn($params=array())
{
    return 
$this->queryInternal('fetchAll',PDO::FETCH_COLUMN,$params);
}

执行SQL语句并返回结果的第一列。 当只需要一个值的时候,这个方法比query更方便, 注意,返回的列将包含每一个结果行的第一个元素。

queryRow() 方法
public mixed queryRow(boolean $fetchAssociative=true, array $params=array ( ))
$fetchAssociative boolean 是否每一行应该被作为一个关联数组返回, 关联数组的列名为键或列索引作为键(从0开始)。
$params array SQL执行的输入参数 (name=>value)。 这是 bindParambindValue二选一的。 如果你有多个输入参数,用这种方式传递它们能提高性能。注意如果你用这种方式传递参数, 你不能使用 bindParambindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。
{return} mixed the first row (in terms of an array) of the query result, false if no result.
public function queryRow($fetchAssociative=true,$params=array())
{
    return 
$this->queryInternal('fetch',$fetchAssociative $this->_fetchMode PDO::FETCH_NUM$params);
}

执行此SQL语句并返回结果的第一行。 当只需要第一行数据时,这个方法比query更方便。

queryScalar() 方法
public mixed queryScalar(array $params=array ( ))
$params array SQL执行的输入参数 (name=>value)。这是 bindParambindValue二选一的。 如果你有多个输入参数, 用这种方式传递它们能提高性能。注意如果你用这种方式传递参数, 你不能使用 bindParambindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。
{return} mixed 返回查询结果的第一行数据的第一列的值。如果没有值返回False。
public function queryScalar($params=array())
{
    
$result=$this->queryInternal('fetchColumn',0,$params);
    if(
is_resource($result) && get_resource_type($result)==='stream')
        return 
stream_get_contents($result);
    else
        return 
$result;
}

执行此SQL语句并返回第一行数据的第一列的值。 当只需要一个值的时候,这个方法比query更方便, (例如 获取记录的数量)。

renameColumn() 方法 (可用自 v1.1.6)
public integer renameColumn(string $table, string $name, string $newName)
$table string 列将被重命名的表。此名称将被该方法恰当的引用。
$name string 此列的旧表名。此名称将被该方法恰当的引用。
$newName string 此列的新名字。此名称将被该方法恰当的引用。
{return} integer 返回此操作影响的行数。
public function renameColumn($table$name$newName)
{
    return 
$this->setText($this->getConnection()->getSchema()->renameColumn($table$name$newName))->execute();
}

绑定并执行一条SQL语句为重命名一个列。

renameTable() 方法 (可用自 v1.1.6)
public integer renameTable(string $table, string $newName)
$table string 要被重命名的表。此名称将这个方法恰当的引用。
$newName string 新的表名。此名称将被该方法恰当的引用。
{return} integer 返回此操作影响的行数。
public function renameTable($table$newName)
{
    return 
$this->setText($this->getConnection()->getSchema()->renameTable($table$newName))->execute();
}

绑定并执行一条SQL语句为重命名一个数据表。

reset() 方法 (可用自 v1.1.6)
public CDbCommand reset()
{return} CDbCommand 返回这个命令实例
public function reset()
{
    
$this->_text=null;
    
$this->_query=null;
    
$this->_statement=null;
    
$this->_paramLog=array();
    
$this->params=array();
    return 
$this;
}

清理命令,并准备建立一个新的查询。 这个方法主要用作当一个命令对象被多次重用时, 建立不同的查询。 调用此方法将清除所有命令对象的内部状态。

rightJoin() 方法 (可用自 v1.1.6)
public CDbCommand rightJoin(string $table, mixed $conditions, array $params=array ( ))
$table string 要被连接的表。 表可包含schema前缀(例如 ‘public.tbl_user’)和/或 表别名 (例如 ‘tbl_user u’)。 这个方法将自动的引用此表名,除非它包含一些圆括号 (这意味着此表被给定作为一个子查询或DB表达式).
$conditions mixed 出现在ON部分的join条件。 请参考where关于怎样指定条件。
$params array 绑定到此查询的参数 (name=>value)
{return} CDbCommand 返回此命令对象本身
public function rightJoin($table$conditions$params=array())
{
    return 
$this->joinInternal('right join'$table$conditions$params);
}

附加一个RIGHT OUTER JOIN部分到此查询。

select() 方法 (可用自 v1.1.6)
public CDbCommand select(mixed $columns='*', string $option='')
$columns mixed 被选择的列。 默认值为 '*',意思是所有的列。 列能被一个字符串指定(例如 "id, name")或一个数组(例如 array('id', 'name')). 列能包含表前缀(例如 "tbl_user.id") 和/或 列别名(例如 "tbl_user.id AS user_id")。 这个方法将自动的引用此列名,除非一个列包含一些圆括号 (这意味着此列包含一个DB表达式).
$option string 附加选择应该被附加到'SELECT'关键字。 例如,在MySQL,选项'SQL_CALC_FOUND_ROWS'能被使用。这个参数自版本1.1.8开始支持。
{return} CDbCommand 返回此命令对象本身
public function select($columns='*'$option='')
{
    if(
is_string($columns) && strpos($columns,'(')!==false)
        
$this->_query['select']=$columns;
    else
    {
        if(!
is_array($columns))
            
$columns=preg_split('/\s*,\s*/',trim($columns),-1,PREG_SPLIT_NO_EMPTY);

        foreach(
$columns as $i=>$column)
        {
            if(
is_object($column))
                
$columns[$i]=(string)$column;
            else if(
strpos($column,'(')===false)
            {
                if(
preg_match('/^(.*?)(?i:\s+as\s+|\s+)(.*)$/',$column,$matches))
                    
$columns[$i]=$this->_connection->quoteColumnName($matches[1]).' AS '.$this->_connection->quoteColumnName($matches[2]);
                else
                    
$columns[$i]=$this->_connection->quoteColumnName($column);
            }
        }
        
$this->_query['select']=implode(', ',$columns);
    }
    if(
$option!='')
        
$this->_query['select']=$option.' '.$this->_query['select'];
    return 
$this;
}

设置查询的SELECT部分。

selectDistinct() 方法 (可用自 v1.1.6)
public CDbCommand selectDistinct(mixed $columns='*')
$columns mixed 被选择的列,参见select为更多信息。
{return} CDbCommand 返回此命令对象本身
public function selectDistinct($columns='*')
{
    
$this->_query['distinct']=true;
    return 
$this->select($columns);
}

设置此查询的SELECT部分,带有DISTINCT标志开关。 除了DISTINCT标志开关,这个和select是一样的。

setDistinct() 方法 (可用自 v1.1.6)
public void setDistinct(boolean $value)
$value boolean 一个值指示是否SELECT应该被使用。
public function setDistinct($value)
{
    
$this->_query['distinct']=$value;
}

设置一个值指示是否SELECT DISTINCT应该被使用。

setFetchMode() 方法 (可用自 v1.1.7)
public CDbCommand setFetchMode(mixed $mode)
$mode mixed 读取模式
{return} CDbCommand
public function setFetchMode($mode)
{
    
$params=func_get_args();
    
$this->_fetchMode $params;
    return 
$this;
}

设置此语句的默认读取模式。

setFrom() 方法 (可用自 v1.1.6)
public void setFrom(mixed $value)
$value mixed 被选择的表。 关于怎样指定这个参数请参考from()更多细节。
public function setFrom($value)
{
    
$this->from($value);
}

设置查询的FROM部分。

setGroup() 方法 (可用自 v1.1.6)
public void setGroup(mixed $value)
$value mixed GROUP BY 部分。 关于怎样指定这个参数请参考 group() 关于更多细节。
public function setGroup($value)
{
    
$this->group($value);
}

设置查询的 GROUP BY 部分。

setHaving() 方法 (可用自 v1.1.6)
public void setHaving(mixed $value)
$value mixed HAVING 部分。 关于怎样指定这个参数请参考having()更多细节。
public function setHaving($value)
{
    
$this->having($value);
}

设置查询的 HAVING 部分。

setJoin() 方法 (可用自 v1.1.6)
public void setJoin(mixed $value)
$value mixed 查询的join部分。 这个可能是一个字符串或一个数组,代表查询中多个join部分。 每一部分必须包含恰当的join制作符(例如 'LEFT JOIN tbl_profile ON tbl_user.id=tbl_profile.id')
public function setJoin($value)
{
    
$this->_query['join']=$value;
}

设置查询的join部分。

setLimit() 方法 (可用自 v1.1.6)
public void setLimit(integer $value)
$value integer LIMIT 部分。 关于怎样指定这个参数请参考 limit() 为更多细节。
public function setLimit($value)
{
    
$this->limit($value);
}

设置查询的 LIMIT 部分。

setOffset() 方法 (可用自 v1.1.6)
public void setOffset(integer $value)
$value integer OFFSET 部分。 关于怎样指定这个参数请参考 offset() 为更多细节。
public function setOffset($value)
{
    
$this->offset($value);
}

设置查询的 OFFSET 部分。

setOrder() 方法 (可用自 v1.1.6)
public void setOrder(mixed $value)
$value mixed ORDER BY 部分。 关于怎样指定这个参数请参考 order() 为更多细节。
public function setOrder($value)
{
    
$this->order($value);
}

设置查询的 ORDER BY 部分。

setSelect() 方法 (可用自 v1.1.6)
public void setSelect(mixed $value)
$value mixed 被选择的数据。 请参考select()怎样指定这个参数的更多细节。
public function setSelect($value)
{
    
$this->select($value);
}

设置的SELECT部分。

setText() 方法
public CDbCommand setText(string $value)
$value string 将被执行的SQL语句
{return} CDbCommand 返回这个命令实例
public function setText($value)
{
    if(
$this->_connection->tablePrefix!==null && $value!='')
        
$this->_text=preg_replace('/{{(.*?)}}/',$this->_connection->tablePrefix.'\1',$value);
    else
        
$this->_text=$value;
    
$this->cancel();
    return 
$this;
}

指定要执行的SQL语句。 之前任何查询都会终止或者取消。

setUnion() 方法 (可用自 v1.1.6)
public void setUnion(mixed $value)
$value mixed UNION 部分。 这个可以是一个字符串或一个数组表示多个SQL语句被连接在一起。
public function setUnion($value)
{
    
$this->_query['union']=$value;
}

设置查询的 UNION 部分。

setWhere() 方法 (可用自 v1.1.6)
public void setWhere(mixed $value)
$value mixed where 部分。 关于怎样指定这个参数请参考where()更多细节。
public function setWhere($value)
{
    
$this->where($value);
}

设置查询的 WHERE 部分。

truncateTable() 方法 (可用自 v1.1.6)
public integer truncateTable(string $table)
$table string 要被清空的表。此名称将被该方法恰当的引用。
{return} integer 返回此操作影响的行数。
public function truncateTable($table)
{
    
$schema=$this->getConnection()->getSchema();
    
$n=$this->setText($schema->truncateTable($table))->execute();
    if(
strncasecmp($this->getConnection()->getDriverName(),'sqlite',6)===0)
        
$schema->resetSequence($schema->getTable($table));
    return 
$n;
}

绑定并执行一条SQL语句为清空一个数据表。

union() 方法 (可用自 v1.1.6)
public CDbCommand union(string $sql)
$sql string 使用UNION要附加的SQL语句。
{return} CDbCommand 返回此命令对象本身
public function union($sql)
{
    if(isset(
$this->_query['union']) && is_string($this->_query['union']))
        
$this->_query['union']=array($this->_query['union']);

    
$this->_query['union'][]=$sql;

    return 
$this;
}

附加一个UNION操作符到一个SQL语句。

update() 方法 (可用自 v1.1.6)
public integer update(string $table, array $columns, mixed $conditions='', array $params=array ( ))
$table string 要更新的表。
$columns array 要更新的列数据 (name=>value) 。
$conditions mixed 放入 WHERE 部分的条件。 请参考 where 怎样指定条件。
$params array 要绑定到此查询的参数。
{return} integer 返回此操作影响的行数。
public function update($table$columns$conditions=''$params=array())
{
    
$lines=array();
    foreach(
$columns as $name=>$value)
    {
        if(
$value instanceof CDbExpression)
        {
            
$lines[]=$this->_connection->quoteColumnName($name) . '=' $value->expression;
            foreach(
$value->params as $n => $v)
                
$params[$n] = $v;
        }
        else
        {
            
$lines[]=$this->_connection->quoteColumnName($name) . '=:' $name;
            
$params[':' $name]=$value;
        }
    }
    
$sql='UPDATE ' $this->_connection->quoteTableName($table) . ' SET ' implode(', '$lines);
    if((
$where=$this->processConditions($conditions))!='')
        
$sql.=' WHERE '.$where;
    return 
$this->setText($sql)->execute($params);
}

创建并执行一条UPDATE SQL语句。 该方法将恰当的转义列名,并绑定要更新的值。

where() 方法 (可用自 v1.1.6)
public CDbCommand where(mixed $conditions, array $params=array ( ))
$conditions mixed 放在WHERE部分的条件。
$params array 绑定到此查询的参数 (name=>value)
{return} CDbCommand 返回此命令对象本身
public function where($conditions$params=array())
{
    
$this->_query['where']=$this->processConditions($conditions);
    foreach(
$params as $name=>$value)
        
$this->params[$name]=$value;
    return 
$this;
}

设置查询的WHERE。

这个方法要求一个 $conditions 参数和一个 $params 参数, 指定值绑定到查询。

$conditions 参数可以是一个字符串(例如 'id=1')或一个数组。 如果是后者,它必须是这种格式 array(operator, operand1, operand2, ...), 操作符可以是下面当中的一个,可能的操作数依赖于相应的操作符 :

  • and: 操作数应该使用AND连接起来。例如, array('and', 'id=1', 'id=2') 将生成 'id=1 AND id=2'。如果一个操作数是一个数组, 它将被使用这里描述的相同规则转换成一个字符串。例如, array('and', 'type=1', array('or', 'id=1', 'id=2')) 将生成 'type=1 AND (id=1 OR id=2)'。 该方法将不做任何引用或转义。
  • or: 和 and 操作符相似,除了操作数是使用OR连接起来。
  • in: 操作数1应该是一列或DB表达式,操作数2应该是一个数组, 表示相应的列的值或DB表达式应该在的范围。例如, array('in', 'id', array(1,2,3)) 将生成 'id IN (1,2,3)'. 这个方法将正确的引用列名和范围中的转义值。
  • not in: 和 in 相似,除了在生成条件时把IN替换成NOT IN.
  • like: 操作数1应该是一列或一个DB表达式,操作数2是一个字符串或一个数组 表示列或DB表达式应该like的值。 例如, array('like', 'name', '%tester%') 将生成 "name LIKE '%tester%'". 当值范围被给定为一个数组,多个LIKE谓语将被生成并使用AND连接起来。 例如, array('like', 'name', array('%test%', '%sample%')) 将生成 "name LIKE '%test%' AND name LIKE '%sample%'". 这个方法将正确的引用列名和范围中的转义值。
  • not like: 和 like相似,除了在生成条件时使用NOT LIKE替换LIKE。
  • or like: 和 like相似,除了OR被用作把LIKE谓语连接起来。
  • or not like: 和 not like相似,除了OR被用作把NOT LIKE谓语连接起来。