CDbCommand
包 | system.db |
---|---|
继承 | class CDbCommand » CComponent |
源自 | 1.0 |
版本 | $Id: CDbCommand.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 | framework/db/CDbCommand.php |
它通常通过调用CDbConnection::createCommand创建。 要执行的SQL语句可以通过Text设置。
要执行一条非查询的SQL(如:insert,delete,update),调用execute。 要执行一条SQL语句返回结果数据集(如:SELECT), 使用 query 或它的简便版本 queryRow, queryColumn或者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 属性 只读 public CDbConnection getConnection()和这个命令相关的连接。
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’) 。 他们最终的查询结果等同。当传递查询为一个数组时,通常要设置下面的属性: select,distinct,from,where,join, group,having,order,limit,offset和union。 请参考这些属性每个设置的更多细节。 关于验证属性。这个功能可用自版本 1.1.6。 自 1.1.7 通过设置FetchMode使用一个特定的数据获取模式是可能的。参见http://www.php.net/manual/en/function.PDOStatement-setFetchMode.php 为更多详细信息。 |
publicfunction__construct(CDbConnection$connection,$query=null)
{
$this->_connection=$connection;
if(is_array($query))
{
foreach($queryas$name=>$value)
$this->$name=$value;
}
else
$this->setText($query);
}
构造函数。
__sleep() 方法public array __sleep() | ||
{return} | array |
publicfunction__sleep()
{
$this->_statement=null;
returnarray_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 | 返回此操作影响的行数。 |
publicfunctionaddColumn($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 | 返回此操作影响的行数。 |
publicfunctionaddForeignKey($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 | 返回此操作影响的行数。 |
publicfunctionalterColumn($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 | 当前要执行的命令 |
publicfunctionbindParam($name,&$value,$dataType=null,$length=null,$driverOptions=null)
{
$this->prepare();
if($dataType===null)
$this->_statement->bindParam($name,$value,$this->_connection->getPdoType(gettype($value)));
elseif($length===null)
$this->_statement->bindParam($name,$value,$dataType);
elseif($driverOptions===null)
$this->_statement->bindParam($name,$value,$dataType,$length);
else
$this->_statement->bindParam($name,$value,$dataType,$length,$driverOptions);
$this->_paramLog[$name]=&$value;
return$this;
}
绑定一个参数到要执行的语句。
参见
- http://www.php.net/manual/en/function.PDOStatement-bindParam.php
public CDbCommand bindValue(mixed $name, mixed $value, integer $dataType=NULL) | ||
$name | mixed | 参数标签符。 对于一个使用命名占位符的预准备语句, 这将是一个表单名称参数:name, 对于一个使用问号占位符的预准备语句, 这将是一个从1开始的参数位置索引。 |
$value | mixed | 绑定到此参数的值 |
$dataType | integer | 参数的SQL数据类型。如果为null,此类型由PHP值的类型决定。 |
{return} | CDbCommand | 当前要执行的命令 |
publicfunctionbindValue($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;
}
绑定一个值到参数。
参见
- http://www.php.net/manual/en/function.PDOStatement-bindValue.php
public CDbCommand bindValues(array $values) | ||
$values | array | 要被绑定的值。 这个必须由相应的数组键给定参数名,数组值给定参数值。 例如, array(‘:name’=>‘John’, ‘:age’=>25) . |
{return} | CDbCommand | 返回当前将执行的命令 |
publicfunctionbindValues($values)
{
$this->prepare();
foreach($valuesas$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 | 名称-值对查询规范。 下面的查询选项被支持。:select,distinct,from, where,join, group, having, order, limit,offset 和 union。 |
{return} | string | 返回SQL语句 |
publicfunctionbuildQuery($query)
{
$sql=isset($query['distinct'])&&$query['distinct']?'SELECTDISTINCT':'SELECT';
$sql.=''.(isset($query['select'])?$query['select']:'*');
if(isset($query['from']))
$sql.="nFROM".$query['from'];
else
thrownewCDbException(Yii::t('yii','TheDBquerymustcontainthe"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.="nGROUPBY".$query['group'];
if(isset($query['having']))
$sql.="nHAVING".$query['having'];
if(isset($query['order']))
$sql.="nORDERBY".$query['order'];
$limit=isset($query['limit'])?(int)$query['limit']:-1;
$offset=isset($query['offset'])?(int)$query['offset']:-1;
if($limit>=0||$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() |
publicfunctioncancel()
{
$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 | 返回此操作影响的行数。 |
publicfunctioncreateIndex($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 | 返回此操作影响的行数。 |
publicfunctioncreateTable($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中。
public CDbCommand crossJoin(string $table) | ||
$table | string | 要被连接的表。 表可包含schema前缀(例如 ‘public.tbl_user’)和/或 表别名 (例如 ‘tbl_user u’)。 这个方法将自动的引用此表名,除非它包含一些圆括号 (这意味着此表被给定作为一个子查询或DB表达式)。 |
{return} | CDbCommand | 返回此命令对象本身 |
publicfunctioncrossJoin($table)
{
return$this->joinInternal('crossjoin',$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 | 返回此操作影响的行数。 |
publicfunctiondelete($table,$conditions='',$params=array())
{
$sql='DELETEFROM'.$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 | 返回此操作影响的行数。 |
publicfunctiondropColumn($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 | 返回此操作影响的行数。 |
publicfunctiondropForeignKey($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 | 返回此操作影响的行数。 |
publicfunctiondropIndex($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 | 返回此操作影响的行数。 |
publicfunctiondropTable($table)
{
return$this->setText($this->getConnection()->getSchema()->dropTable($table))->execute();
}
绑定并执行一条SQL语句为删除一个数据表
execute() 方法public integer execute(array $params=array ( )) | ||
$params | array | 为SQL执行的输入参数 (name=>value)。 对于bindParam 和 bindValue这是二选一的。 如果你有多个输入参数,用这种方式传递他们能提高性能。 注意,如果你用这种方式传递参数,你不能使用 bindParam或者bindValue绑定参数或值, 反之亦然,这样可以提高性能。 |
{return} | integer | 返回此操作影响的行数。 |
publicfunctionexecute($params=array())
{
if($this->_connection->enableParamLogging&&($pars=array_merge($this->_paramLog,$params))!==array())
{
$p=array();
foreach($parsas$name=>$value)
$p[$name]=$name.'='.var_export($value,true);
$par='.Boundwith'.implode(',',$p);
}
else
$par='';
Yii::trace('ExecutingSQL:'.$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=$einstanceofPDOException?$e->errorInfo:null;
$message=$e->getMessage();
Yii::log(Yii::t('yii','CDbCommand::execute()failed:{error}.TheSQLstatementexecutedwas:{sql}.',
array('{error}'=>$message,'{sql}'=>$this->getText().$par)),CLogger::LEVEL_ERROR,'system.db.CDbCommand');
if(YII_DEBUG)
$message.='.TheSQLstatementexecutedwas:'.$this->getText().$par;
thrownewCDbException(Yii::t('yii','CDbCommandfailedtoexecutetheSQLstatement:{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 | 返回此命令对象本身 |
publicfunctionfrom($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($tablesas$i=>$table)
{
if(strpos($table,'(')===false)
{
if(preg_match('/^(.*?)(?i:s+ass+|s+)(.*)$/',$table,$matches))//withalias
$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 | 和这个命令相关的连接。 |
publicfunctiongetConnection()
{
return$this->_connection;
}
getDistinct() 方法 (可用自 v1.1.6)public boolean getDistinct() | ||
{return} | boolean | 返回一个值指示是否SELECT DISTINCT应该被使用。 |
publicfunctiongetDistinct()
{
returnisset($this->_query['distinct'])?$this->_query['distinct']:false;
}
返回一个值指示是否SELECT DISTINCT应该被使用。
getFrom() 方法 (可用自 v1.1.6)public string getFrom() | ||
{return} | string | 查询的FROM部分(没有 'FROM' )。 |
publicfunctiongetFrom()
{
returnisset($this->_query['from'])?$this->_query['from']:'';
}
返回查询的 FROM 部分。
getGroup() 方法 (可用自 v1.1.6)public string getGroup() | ||
{return} | string | 返回查询中的 GROUP BY 部分 (没有 ‘GROUP BY’ )。 |
publicfunctiongetGroup()
{
returnisset($this->_query['group'])?$this->_query['group']:'';
}
返回查询中的 GROUP BY 部分。
getHaving() 方法 (可用自 v1.1.6)public string getHaving() | ||
{return} | string | 返回查询的HAVING部分(没有 'HAVING' ) 。 |
publicfunctiongetHaving()
{
returnisset($this->_query['having'])?$this->_query['having']:'';
}
返回查询的HAVING部分。
getJoin() 方法 (可用自 v1.1.6)public mixed getJoin() | ||
{return} | mixed | 查询的join。 这个可以是一个数组表示多个join片断,或一个字符串表示单个join片断。 每一个join片断将包含恰当的join操作符(例如 LEFT JOIN)。 |
publicfunctiongetJoin()
{
returnisset($this->_query['join'])?$this->_query['join']:'';
}
返回查询的join部分。
getLimit() 方法 (可用自 v1.1.6)public string getLimit() | ||
{return} | string | 返回查询的 LIMIT 部分(没有 'LIMIT')。 |
publicfunctiongetLimit()
{
returnisset($this->_query['limit'])?$this->_query['limit']:-1;
}
返回查询的 LIMIT 部分。
getOffset() 方法 (可用自 v1.1.6)public string getOffset() | ||
{return} | string | 查询的OFFSET部分(没有'OFFSET' )。 |
publicfunctiongetOffset()
{
returnisset($this->_query['offset'])?$this->_query['offset']:-1;
}
返回查询的 OFFSET 部分。
getOrder() 方法 (可用自 v1.1.6)public string getOrder() | ||
{return} | string | 返回查询中的ORDER BY部分(没有 'ORDER BY' )。 |
publicfunctiongetOrder()
{
returnisset($this->_query['order'])?$this->_query['order']:'';
}
返回查询的 ORDER BY 部分。
getPdoStatement() 方法public PDOStatement getPdoStatement() | ||
{return} | PDOStatement | 这个命令底层的PDOStatement 如果尚未准备好语句,它可以是null。 |
publicfunctiongetPdoStatement()
{
return$this->_statement;
}
getSelect() 方法 (可用自 v1.1.6)public string getSelect() | ||
{return} | string | 查询的SELECT部分(没有'SELECT') |
publicfunctiongetSelect()
{
returnisset($this->_query['select'])?$this->_query['select']:'';
}
返回查询的SELECT部分。
getText() 方法public string getText() | ||
{return} | string | 返回将被执行的SQL语句。 |
publicfunctiongetText()
{
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)部分。 |
publicfunctiongetUnion()
{
returnisset($this->_query['union'])?$this->_query['union']:'';
}
返回查询的 UNION 部分。
getWhere() 方法 (可用自 v1.1.6)public string getWhere() | ||
{return} | string | 查询的WHERE部分 (没有 'WHERE' )。 |
publicfunctiongetWhere()
{
returnisset($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 | 返回此命令对象本身 |
publicfunctiongroup($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($columnsas$i=>$column)
{
if(is_object($column))
$columns[$i]=(string)$column;
elseif(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 | 返回此命令对象本身 |
publicfunctionhaving($conditions,$params=array())
{
$this->_query['having']=$this->processConditions($conditions);
foreach($paramsas$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 | 返回此执行影响的行数。 |
publicfunctioninsert($table,$columns)
{
$params=array();
$names=array();
$placeholders=array();
foreach($columnsas$name=>$value)
{
$names[]=$this->_connection->quoteColumnName($name);
if($valueinstanceofCDbExpression)
{
$placeholders[]=$value->expression;
foreach($value->paramsas$n=>$v)
$params[$n]=$v;
}
else
{
$placeholders[]=':'.$name;
$params[':'.$name]=$value;
}
}
$sql='INSERTINTO'.$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 | 返回此命令对象本身 |
publicfunctionjoin($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 | 返回此命令对象本身 |
publicfunctionleftJoin($table,$conditions,$params=array())
{
return$this->joinInternal('leftjoin',$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 | 返回此命令对象本身 |
publicfunctionlimit($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 | 返回此命令对象本身 |
publicfunctionnaturalJoin($table)
{
return$this->joinInternal('naturaljoin',$table);
}
附加一个NATURAL JOIN 部分到查询。 注意不是所有的DBMS都支持NATURAL JOIN.
offset() 方法 (可用自 v1.1.6)public CDbCommand offset(integer $offset) | ||
$offset | integer | offset值 |
{return} | CDbCommand | 返回此命令对象本身 |
publicfunctionoffset($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 | 返回此命令对象本身 |
publicfunctionorder($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($columnsas$i=>$column)
{
if(is_object($column))
$columns[$i]=(string)$column;
elseif(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() |
publicfunctionprepare()
{
if($this->_statement==null)
{
try
{
$this->_statement=$this->getConnection()->getPdoInstance()->prepare($this->getText());
$this->_paramLog=array();
}
catch(Exception$e)
{
Yii::log('ErrorinpreparingSQL:'.$this->getText(),CLogger::LEVEL_ERROR,'system.db.CDbCommand');
$errorInfo=$einstanceofPDOException?$e->errorInfo:null;
thrownewCDbException(Yii::t('yii','CDbCommandfailedtopreparetheSQLstatement:{error}',
array('{error}'=>$e->getMessage())),(int)$e->getCode(),$errorInfo);
}
}
}
准备要执行的SQL语句。 对于要多次执行的复杂的SQL语句, 这个可以提高性能。 对于绑定了参数的SQL语句, 这个方法会被自动触发。
query() 方法public CDbDataReader query(array $params=array ( )) | ||
$params | array | 为SQL执行的输入基数 (name=>value)。 这是bindParam 和 bindValue二选一的。 如果你有多个输入参数,用这种方式传递它们能提高性能。 注意如果你用这种方式传递参数,你不能使用 bindParam或 bindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。 |
{return} | CDbDataReader | 获取查询结果的读取器对象 |
publicfunctionquery($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)。这是 bindParam 和 bindValue二选一的。如果你有多个输入参数, 用这种方式传递它们能提高性能。注意如果你用这种方式传递参数, 你不能使用 bindParam或 bindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。 |
{return} | array | 返回查询结果中的所有行。每个数组元素是一个数组,表示一行。 如果查询结果为空,返回空数组。 |
publicfunctionqueryAll($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)。这是 bindParam和bindValue二选一的。 如果你有多个输入参数, 用这种方式传递它们能提高性能。注意如果你用这种方式传递参数, 你不能使用 bindParam或bindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。 |
{return} | array | 返回查询结果的第一列。 如果没有结果为空数组。 |
publicfunctionqueryColumn($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)。 这是 bindParam 和bindValue二选一的。 如果你有多个输入参数,用这种方式传递它们能提高性能。注意如果你用这种方式传递参数, 你不能使用 bindParam或 bindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。 |
{return} | mixed | the first row (in terms of an array) of the query result, false if no result. |
publicfunctionqueryRow($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)。这是 bindParam 的bindValue二选一的。 如果你有多个输入参数, 用这种方式传递它们能提高性能。注意如果你用这种方式传递参数, 你不能使用 bindParam或 bindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。 |
{return} | mixed | 返回查询结果的第一行数据的第一列的值。如果没有值返回False。 |
publicfunctionqueryScalar($params=array())
{
$result=$this->queryInternal('fetchColumn',0,$params);
if(is_resource($result)&&get_resource_type($result)==='stream')
returnstream_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 | 返回此操作影响的行数。 |
publicfunctionrenameColumn($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 | 返回此操作影响的行数。 |
publicfunctionrenameTable($table,$newName)
{
return$this->setText($this->getConnection()->getSchema()->renameTable($table,$newName))->execute();
}
绑定并执行一条SQL语句为重命名一个数据表。
reset() 方法 (可用自 v1.1.6)public CDbCommand reset() | ||
{return} | CDbCommand | 返回这个命令实例 |
publicfunctionreset()
{
$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 | 返回此命令对象本身 |
publicfunctionrightJoin($table,$conditions,$params=array())
{
return$this->joinInternal('rightjoin',$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 | 返回此命令对象本身 |
publicfunctionselect($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($columnsas$i=>$column)
{
if(is_object($column))
$columns[$i]=(string)$column;
elseif(strpos($column,'(')===false)
{
if(preg_match('/^(.*?)(?i:s+ass+|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 | 返回此命令对象本身 |
publicfunctionselectDistinct($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应该被使用。 |
publicfunctionsetDistinct($value)
{
$this->_query['distinct']=$value;
}
设置一个值指示是否SELECT DISTINCT应该被使用。
setFetchMode() 方法 (可用自 v1.1.7)public CDbCommand setFetchMode(mixed $mode) | ||
$mode | mixed | 读取模式 |
{return} | CDbCommand |
publicfunctionsetFetchMode($mode)
{
$params=func_get_args();
$this->_fetchMode=$params;
return$this;
}
设置此语句的默认读取模式。
参见
- http://www.php.net/manual/en/function.PDOStatement-setFetchMode.php
public void setFrom(mixed $value) | ||
$value | mixed | 被选择的表。 关于怎样指定这个参数请参考from()更多细节。 |
publicfunctionsetFrom($value)
{
$this->from($value);
}
设置查询的FROM部分。
setGroup() 方法 (可用自 v1.1.6)public void setGroup(mixed $value) | ||
$value | mixed | GROUP BY 部分。 关于怎样指定这个参数请参考 group() 关于更多细节。 |
publicfunctionsetGroup($value)
{
$this->group($value);
}
设置查询的 GROUP BY 部分。
setHaving() 方法 (可用自 v1.1.6)public void setHaving(mixed $value) | ||
$value | mixed | HAVING 部分。 关于怎样指定这个参数请参考having()更多细节。 |
publicfunctionsetHaving($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') |
publicfunctionsetJoin($value)
{
$this->_query['join']=$value;
}
设置查询的join部分。
setLimit() 方法 (可用自 v1.1.6)public void setLimit(integer $value) | ||
$value | integer | LIMIT 部分。 关于怎样指定这个参数请参考 limit() 为更多细节。 |
publicfunctionsetLimit($value)
{
$this->limit($value);
}
设置查询的 LIMIT 部分。
setOffset() 方法 (可用自 v1.1.6)public void setOffset(integer $value) | ||
$value | integer | OFFSET 部分。 关于怎样指定这个参数请参考 offset() 为更多细节。 |
publicfunctionsetOffset($value)
{
$this->offset($value);
}
设置查询的 OFFSET 部分。
setOrder() 方法 (可用自 v1.1.6)public void setOrder(mixed $value) | ||
$value | mixed | ORDER BY 部分。 关于怎样指定这个参数请参考 order() 为更多细节。 |
publicfunctionsetOrder($value)
{
$this->order($value);
}
设置查询的 ORDER BY 部分。
setSelect() 方法 (可用自 v1.1.6)public void setSelect(mixed $value) | ||
$value | mixed | 被选择的数据。 请参考select()怎样指定这个参数的更多细节。 |
publicfunctionsetSelect($value)
{
$this->select($value);
}
设置的SELECT部分。
setText() 方法public CDbCommand setText(string $value) | ||
$value | string | 将被执行的SQL语句 |
{return} | CDbCommand | 返回这个命令实例 |
publicfunctionsetText($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语句被连接在一起。 |
publicfunctionsetUnion($value)
{
$this->_query['union']=$value;
}
设置查询的 UNION 部分。
setWhere() 方法 (可用自 v1.1.6)public void setWhere(mixed $value) | ||
$value | mixed | where 部分。 关于怎样指定这个参数请参考where()更多细节。 |
publicfunctionsetWhere($value)
{
$this->where($value);
}
设置查询的 WHERE 部分。
truncateTable() 方法 (可用自 v1.1.6)public integer truncateTable(string $table) | ||
$table | string | 要被清空的表。此名称将被该方法恰当的引用。 |
{return} | integer | 返回此操作影响的行数。 |
publicfunctiontruncateTable($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 | 返回此命令对象本身 |
publicfunctionunion($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 | 返回此操作影响的行数。 |
publicfunctionupdate($table,$columns,$conditions='',$params=array())
{
$lines=array();
foreach($columnsas$name=>$value)
{
if($valueinstanceofCDbExpression)
{
$lines[]=$this->_connection->quoteColumnName($name).'='.$value->expression;
foreach($value->paramsas$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 | 返回此命令对象本身 |
publicfunctionwhere($conditions,$params=array())
{
$this->_query['where']=$this->processConditions($conditions);
foreach($paramsas$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>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谓语连接起来。