包 | system.db |
---|---|
继承 | class CDbCommand » CComponent |
源自 | 1.0 |
版本 | $Id: CDbCommand.php 3515 2011-12-28 12:29:24Z mDOMba $ |
源码 |
它通常通过调用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 |
属性详细
和这个命令相关的连接。
public void setDistinct(boolean $value)
返回一个值指示是否SELECT DISTINCT应该被使用。
public void setFrom(mixed $value)
返回查询的 FROM 部分。
public void setGroup(mixed $value)
返回查询中的 GROUP BY 部分。
public void setHaving(mixed $value)
返回查询的HAVING部分。
public void setJoin(mixed $value)
返回查询的join部分。
public void setLimit(integer $value)
返回查询的 LIMIT 部分。
public void setOffset(integer $value)
返回查询的 OFFSET 部分。
public void setOrder(mixed $value)
返回查询的 ORDER BY 部分。
参数(name=>value)被绑定要查询的当前语句。
这个命令底层的PDOStatement 如果尚未准备好语句,它可以是null。
public void setSelect(mixed $value)
返回查询的SELECT部分。
public CDbCommand setText(string $value)
返回将被执行的SQL语句。
public void setUnion(mixed $value)
返回查询的 UNION 部分。
public void setWhere(mixed $value)
返回查询的WHERE部分。
方法详细
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 为更多详细信息。 |
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);
}
构造函数。
public array __sleep()
| ||
{return} | array |
public function __sleep()
{
$this->_statement=null;
return array_keys(get_object_vars($this));
}
当序列化时语句声明为null。
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语句为增加一个新的数据列。
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语句。 这个方法将恰当的引用此列和列名。
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语句为改变一个列的定义。
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;
}
绑定一个参数到要执行的语句。
参见
- 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 | 当前要执行的命令 |
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;
}
绑定一个值到参数。
参见
- http://www.php.net/manual/en/function.PDOStatement-bindValue.php
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类型决定。
public string buildQuery(array $query)
| ||
$query | array | 名称-值对查询规范。 下面的查询选项被支持。:select,distinct,from, where,join, group, having, order, limit,offset 和 union。 |
{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>=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语句从给定查询规范。
public void cancel()
|
public function cancel()
{
$this->_statement=null;
}
取消SQL语句的执行。
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语句为创建一个新索引。
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中。
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.
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 语句。
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语句为删除一个数据列。
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语句为删除一个外键约束。
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语句为删除一个索引。
public integer dropTable(string $table)
| ||
$table | string | 要删除的表。此名称将被该方法恰当的引用。 |
{return} | integer | 返回此操作影响的行数。 |
public function dropTable($table)
{
return $this->setText($this->getConnection()->getSchema()->dropTable($table))->execute();
}
绑定并执行一条SQL语句为删除一个数据表
public integer execute(array $params=array (
))
| ||
$params | array | 为SQL执行的输入参数 (name=>value)。 对于bindParam 和 bindValue这是二选一的。 如果你有多个输入参数,用这种方式传递他们能提高性能。 注意,如果你用这种方式传递参数,你不能使用 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 语句。 将不返回结果集。
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部分。
public CDbConnection getConnection()
| ||
{return} | CDbConnection | 和这个命令相关的连接。 |
public function getConnection()
{
return $this->_connection;
}
public boolean getDistinct()
| ||
{return} | boolean | 返回一个值指示是否SELECT DISTINCT应该被使用。 |
public function getDistinct()
{
return isset($this->_query['distinct']) ? $this->_query['distinct'] : false;
}
返回一个值指示是否SELECT DISTINCT应该被使用。
public string getFrom()
| ||
{return} | string | 查询的FROM部分(没有 'FROM' )。 |
public function getFrom()
{
return isset($this->_query['from']) ? $this->_query['from'] : '';
}
返回查询的 FROM 部分。
public string getGroup()
| ||
{return} | string | 返回查询中的 GROUP BY 部分 (没有 ‘GROUP BY’ )。 |
public function getGroup()
{
return isset($this->_query['group']) ? $this->_query['group'] : '';
}
返回查询中的 GROUP BY 部分。
public string getHaving()
| ||
{return} | string | 返回查询的HAVING部分(没有 'HAVING' ) 。 |
public function getHaving()
{
return isset($this->_query['having']) ? $this->_query['having'] : '';
}
返回查询的HAVING部分。
public mixed getJoin()
| ||
{return} | mixed | 查询的join。 这个可以是一个数组表示多个join片断,或一个字符串表示单个join片断。 每一个join片断将包含恰当的join操作符(例如 LEFT JOIN)。 |
public function getJoin()
{
return isset($this->_query['join']) ? $this->_query['join'] : '';
}
返回查询的join部分。
public string getLimit()
| ||
{return} | string | 返回查询的 LIMIT 部分(没有 'LIMIT')。 |
public function getLimit()
{
return isset($this->_query['limit']) ? $this->_query['limit'] : -1;
}
返回查询的 LIMIT 部分。
public string getOffset()
| ||
{return} | string | 查询的OFFSET部分(没有'OFFSET' )。 |
public function getOffset()
{
return isset($this->_query['offset']) ? $this->_query['offset'] : -1;
}
返回查询的 OFFSET 部分。
public string getOrder()
| ||
{return} | string | 返回查询中的ORDER BY部分(没有 'ORDER BY' )。 |
public function getOrder()
{
return isset($this->_query['order']) ? $this->_query['order'] : '';
}
返回查询的 ORDER BY 部分。
public PDOStatement getPdoStatement()
| ||
{return} | PDOStatement | 这个命令底层的PDOStatement 如果尚未准备好语句,它可以是null。 |
public function getPdoStatement()
{
return $this->_statement;
}
public string getSelect()
| ||
{return} | string | 查询的SELECT部分(没有'SELECT') |
public function getSelect()
{
return isset($this->_query['select']) ? $this->_query['select'] : '';
}
返回查询的SELECT部分。
public string getText()
| ||
{return} | string | 返回将被执行的SQL语句。 |
public function getText()
{
if($this->_text=='' && !empty($this->_query))
$this->setText($this->buildQuery($this->_query));
return $this->_text;
}
public mixed getUnion()
| ||
{return} | mixed | 查询的UNION部分(没有'UNION' )。 它可以是一个字符串或一个数组(表示多个union)部分。 |
public function getUnion()
{
return isset($this->_query['union']) ? $this->_query['union'] : '';
}
返回查询的 UNION 部分。
public string getWhere()
| ||
{return} | string | 查询的WHERE部分 (没有 'WHERE' )。 |
public function getWhere()
{
return isset($this->_query['where']) ? $this->_query['where'] : '';
}
返回查询的WHERE部分。
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 部分。
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 部分。
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语句。 该方法将恰当的转义列名,并绑定要插入的值。
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部分到此查询。
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部分到此查询。
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 部分。
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.
public CDbCommand offset(integer $offset)
| ||
$offset | integer | offset值 |
{return} | CDbCommand | 返回此命令对象本身 |
public function offset($offset)
{
$this->_query['offset']=(int)$offset;
return $this;
}
设置查询的 OFFSET 部分。
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部分。
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语句, 这个方法会被自动触发。
public CDbDataReader query(array $params=array (
))
| ||
$params | array | 为SQL执行的输入基数 (name=>value)。 这是bindParam 和 bindValue二选一的。 如果你有多个输入参数,用这种方式传递它们能提高性能。 注意如果你用这种方式传递参数,你不能使用 bindParam或 bindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。 |
{return} | CDbDataReader | 获取查询结果的读取器对象 |
public function query($params=array())
{
return $this->queryInternal('',0,$params);
}
执行SQL语句并返回查询结果。 此方法执行返回结果集的SQL查询。
public array queryAll(boolean $fetchAssociative=true, array $params=array (
))
| ||
$fetchAssociative | boolean | 是否每一行应该被作为一个关联数组返回, 关联数组的列名为键或列索引作为键(从0开始)。 |
$params | array | SQL执行的输入参数(name=>value)。这是 bindParam 和 bindValue二选一的。如果你有多个输入参数, 用这种方式传递它们能提高性能。注意如果你用这种方式传递参数, 你不能使用 bindParam或 bindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。 |
{return} | array | 返回查询结果中的所有行。每个数组元素是一个数组,表示一行。 如果查询结果为空,返回空数组。 |
public function queryAll($fetchAssociative=true,$params=array())
{
return $this->queryInternal('fetchAll',$fetchAssociative ? $this->_fetchMode : PDO::FETCH_NUM, $params);
}
执行SQL语句并返回所有行。
public array queryColumn(array $params=array (
))
| ||
$params | array | SQL执行的输入参数(name=>value)。这是 bindParam和bindValue二选一的。 如果你有多个输入参数, 用这种方式传递它们能提高性能。注意如果你用这种方式传递参数, 你不能使用 bindParam或bindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。 |
{return} | array | 返回查询结果的第一列。 如果没有结果为空数组。 |
public function queryColumn($params=array())
{
return $this->queryInternal('fetchAll',PDO::FETCH_COLUMN,$params);
}
执行SQL语句并返回结果的第一列。 当只需要一个值的时候,这个方法比query更方便, 注意,返回的列将包含每一个结果行的第一个元素。
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. |
public function queryRow($fetchAssociative=true,$params=array())
{
return $this->queryInternal('fetch',$fetchAssociative ? $this->_fetchMode : PDO::FETCH_NUM, $params);
}
执行此SQL语句并返回结果的第一行。 当只需要第一行数据时,这个方法比query更方便。
public mixed queryScalar(array $params=array (
))
| ||
$params | array | SQL执行的输入参数 (name=>value)。这是 bindParam 的bindValue二选一的。 如果你有多个输入参数, 用这种方式传递它们能提高性能。注意如果你用这种方式传递参数, 你不能使用 bindParam或 bindValue绑定参数或值,反之亦然。 绑定方法和输入参数,这样可以提高性能。 |
{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更方便, (例如 获取记录的数量)。
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语句为重命名一个列。
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语句为重命名一个数据表。
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;
}
清理命令,并准备建立一个新的查询。 这个方法主要用作当一个命令对象被多次重用时, 建立不同的查询。 调用此方法将清除所有命令对象的内部状态。
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部分到此查询。
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部分。
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是一样的。
public void setDistinct(boolean $value)
| ||
$value | boolean | 一个值指示是否SELECT应该被使用。 |
public function setDistinct($value)
{
$this->_query['distinct']=$value;
}
设置一个值指示是否SELECT DISTINCT应该被使用。
public CDbCommand setFetchMode(mixed $mode)
| ||
$mode | mixed | 读取模式 |
{return} | CDbCommand |
public function setFetchMode($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()更多细节。 |
public function setFrom($value)
{
$this->from($value);
}
设置查询的FROM部分。
public void setGroup(mixed $value)
| ||
$value | mixed | GROUP BY 部分。 关于怎样指定这个参数请参考 group() 关于更多细节。 |
public function setGroup($value)
{
$this->group($value);
}
设置查询的 GROUP BY 部分。
public void setHaving(mixed $value)
| ||
$value | mixed | HAVING 部分。 关于怎样指定这个参数请参考having()更多细节。 |
public function setHaving($value)
{
$this->having($value);
}
设置查询的 HAVING 部分。
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部分。
public void setLimit(integer $value)
| ||
$value | integer | LIMIT 部分。 关于怎样指定这个参数请参考 limit() 为更多细节。 |
public function setLimit($value)
{
$this->limit($value);
}
设置查询的 LIMIT 部分。
public void setOffset(integer $value)
| ||
$value | integer | OFFSET 部分。 关于怎样指定这个参数请参考 offset() 为更多细节。 |
public function setOffset($value)
{
$this->offset($value);
}
设置查询的 OFFSET 部分。
public void setOrder(mixed $value)
| ||
$value | mixed | ORDER BY 部分。 关于怎样指定这个参数请参考 order() 为更多细节。 |
public function setOrder($value)
{
$this->order($value);
}
设置查询的 ORDER BY 部分。
public void setSelect(mixed $value)
| ||
$value | mixed | 被选择的数据。 请参考select()怎样指定这个参数的更多细节。 |
public function setSelect($value)
{
$this->select($value);
}
设置的SELECT部分。
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语句。 之前任何查询都会终止或者取消。
public void setUnion(mixed $value)
| ||
$value | mixed | UNION 部分。 这个可以是一个字符串或一个数组表示多个SQL语句被连接在一起。 |
public function setUnion($value)
{
$this->_query['union']=$value;
}
设置查询的 UNION 部分。
public void setWhere(mixed $value)
| ||
$value | mixed | where 部分。 关于怎样指定这个参数请参考where()更多细节。 |
public function setWhere($value)
{
$this->where($value);
}
设置查询的 WHERE 部分。
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语句为清空一个数据表。
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语句。
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语句。 该方法将恰当的转义列名,并绑定要更新的值。
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谓语连接起来。