CDbCommand
Package | system.db |
---|---|
Inheritance | class CDbCommand » CComponent |
Since | 1.0 |
Source Code | framework/db/CDbCommand.php |
It is usually created by calling CDbConnection::createCommand. The SQL statement to be executed may be set via Text.
To execute a non-query SQL (such as insert, delete, update), call execute. To execute an SQL statement that returns result data set (such as SELECT), use query or its convenient versions queryRow, queryColumn, or queryScalar.
If an SQL statement returns results (such as a SELECT SQL), the results can be accessed via the returned CDbDataReader.
CDbCommand supports SQL statement preparation and parameter binding. Call bindParam to bind a PHP variable to a parameter in SQL. Call bindValue to bind a value to an SQL parameter. When binding a parameter, the SQL statement is automatically prepared. You may also call prepare to explicitly prepare an SQL statement.
Starting from version 1.1.6, CDbCommand can also be used as a query builder that builds a SQL statement from code fragments. For example,
$user = Yii::app()->db->createCommand() ->select('username, password') ->from('tbl_user') ->where('id=:id', array(':id'=>1)) ->queryRow();
Public Properties
Property | Type | Description | Defined By |
---|---|---|---|
connection | CDbConnection | the connection associated with this command | CDbCommand |
distinct | boolean | Returns a value indicating whether SELECT DISTINCT should be used. | CDbCommand |
from | string | Returns the FROM part in the query. | CDbCommand |
group | string | Returns the GROUP BY part in the query. | CDbCommand |
having | string | Returns the HAVING part in the query. | CDbCommand |
join | mixed | Returns the join part in the query. | CDbCommand |
limit | string | Returns the LIMIT part in the query. | CDbCommand |
offset | string | Returns the OFFSET part in the query. | CDbCommand |
order | string | Returns the ORDER BY part in the query. | CDbCommand |
params | array | the parameters (name=>value) to be bound to the current query. | CDbCommand |
pdoStatement | PDOStatement | the underlying PDOStatement for this command It could be null if the statement is not prepared yet. | CDbCommand |
select | string | Returns the SELECT part in the query. | CDbCommand |
text | string | the SQL statement to be executed | CDbCommand |
union | mixed | Returns the UNION part in the query. | CDbCommand |
where | string | Returns the WHERE part in the query. | CDbCommand |
Public Methods
Method | Description | Defined By |
---|---|---|
__call() | Calls the named method which is not a class method. | CComponent |
__construct() | Constructor. | CDbCommand |
__get() | Returns a property value, an event handler list or a behavior based on its name. | CComponent |
__isset() | Checks if a property value is null. | CComponent |
__set() | Sets value of a component property. | CComponent |
__sleep() | Set the statement to null when serializing. | CDbCommand |
__unset() | Sets a component property to be null. | CComponent |
addColumn() | Builds and executes a SQL statement for adding a new DB column. | CDbCommand |
addForeignKey() | Builds a SQL statement for adding a foreign key constraint to an existing table. | CDbCommand |
addPrimaryKey() | Builds a SQL statement for creating a primary key constraint. | CDbCommand |
alterColumn() | Builds and executes a SQL statement for changing the definition of a column. | CDbCommand |
andWhere() | Appends given condition to the existing WHERE part of the query with 'AND' operator. | CDbCommand |
asa() | Returns the named behavior object. | CComponent |
attachBehavior() | Attaches a behavior to this component. | CComponent |
attachBehaviors() | Attaches a list of behaviors to the component. | CComponent |
attachEventHandler() | Attaches an event handler to an event. | CComponent |
bindParam() | Binds a parameter to the SQL statement to be executed. | CDbCommand |
bindValue() | Binds a value to a parameter. | CDbCommand |
bindValues() | Binds a list of values to the corresponding parameters. | CDbCommand |
buildQuery() | Builds a SQL SELECT statement from the given query specification. | CDbCommand |
canGetProperty() | Determines whether a property can be read. | CComponent |
canSetProperty() | Determines whether a property can be set. | CComponent |
cancel() | Cancels the execution of the SQL statement. | CDbCommand |
createIndex() | Builds and executes a SQL statement for creating a new index. | CDbCommand |
createTable() | Builds and executes a SQL statement for creating a new DB table. | CDbCommand |
crossJoin() | Appends a CROSS JOIN part to the query. | CDbCommand |
delete() | Creates and executes a DELETE SQL statement. | CDbCommand |
detachBehavior() | Detaches a behavior from the component. | CComponent |
detachBehaviors() | Detaches all behaviors from the component. | CComponent |
detachEventHandler() | Detaches an existing event handler. | CComponent |
disableBehavior() | Disables an attached behavior. | CComponent |
disableBehaviors() | Disables all behaviors attached to this component. | CComponent |
dropColumn() | Builds and executes a SQL statement for dropping a DB column. | CDbCommand |
dropForeignKey() | Builds a SQL statement for dropping a foreign key constraint. | CDbCommand |
dropIndex() | Builds and executes a SQL statement for dropping an index. | CDbCommand |
dropPrimaryKey() | Builds a SQL statement for dropping a primary key constraint. | CDbCommand |
dropTable() | Builds and executes a SQL statement for dropping a DB table. | CDbCommand |
enableBehavior() | Enables an attached behavior. | CComponent |
enableBehaviors() | Enables all behaviors attached to this component. | CComponent |
evaluateExpression() | Evaluates a PHP expression or callback under the context of this component. | CComponent |
execute() | Executes the SQL statement. | CDbCommand |
from() | Sets the FROM part of the query. | CDbCommand |
getConnection() | Returns the connection associated with this command | CDbCommand |
getDistinct() | Returns a value indicating whether SELECT DISTINCT should be used. | CDbCommand |
getEventHandlers() | Returns the list of attached event handlers for an event. | CComponent |
getFrom() | Returns the FROM part in the query. | CDbCommand |
getGroup() | Returns the GROUP BY part in the query. | CDbCommand |
getHaving() | Returns the HAVING part in the query. | CDbCommand |
getJoin() | Returns the join part in the query. | CDbCommand |
getLimit() | Returns the LIMIT part in the query. | CDbCommand |
getOffset() | Returns the OFFSET part in the query. | CDbCommand |
getOrder() | Returns the ORDER BY part in the query. | CDbCommand |
getPdoStatement() | Returns the underlying PDOStatement for this command It could be null if the statement is not prepared yet. | CDbCommand |
getSelect() | Returns the SELECT part in the query. | CDbCommand |
getText() | Returns the SQL statement to be executed | CDbCommand |
getUnion() | Returns the UNION part in the query. | CDbCommand |
getWhere() | Returns the WHERE part in the query. | CDbCommand |
group() | Sets the GROUP BY part of the query. | CDbCommand |
hasEvent() | Determines whether an event is defined. | CComponent |
hasEventHandler() | Checks whether the named event has attached handlers. | CComponent |
hasProperty() | Determines whether a property is defined. | CComponent |
having() | Sets the HAVING part of the query. | CDbCommand |
insert() | Creates and executes an INSERT SQL statement. | CDbCommand |
join() | Appends an INNER JOIN part to the query. | CDbCommand |
leftJoin() | Appends a LEFT OUTER JOIN part to the query. | CDbCommand |
limit() | Sets the LIMIT part of the query. | CDbCommand |
naturalJoin() | Appends a NATURAL JOIN part to the query. | CDbCommand |
naturalLeftJoin() | Appends a NATURAL LEFT JOIN part to the query. | CDbCommand |
naturalRightJoin() | Appends a NATURAL RIGHT JOIN part to the query. | CDbCommand |
offset() | Sets the OFFSET part of the query. | CDbCommand |
orWhere() | Appends given condition to the existing WHERE part of the query with 'OR' operator. | CDbCommand |
order() | Sets the ORDER BY part of the query. | CDbCommand |
prepare() | Prepares the SQL statement to be executed. | CDbCommand |
query() | Executes the SQL statement and returns query result. | CDbCommand |
queryAll() | Executes the SQL statement and returns all rows. | CDbCommand |
queryColumn() | Executes the SQL statement and returns the first column of the result. | CDbCommand |
queryRow() | Executes the SQL statement and returns the first row of the result. | CDbCommand |
queryScalar() | Executes the SQL statement and returns the value of the first column in the first row of data. | CDbCommand |
raiseEvent() | Raises an event. | CComponent |
renameColumn() | Builds and executes a SQL statement for renaming a column. | CDbCommand |
renameTable() | Builds and executes a SQL statement for renaming a DB table. | CDbCommand |
reset() | Cleans up the command and prepares for building a new query. | CDbCommand |
rightJoin() | Appends a RIGHT OUTER JOIN part to the query. | CDbCommand |
select() | Sets the SELECT part of the query. | CDbCommand |
selectDistinct() | Sets the SELECT part of the query with the DISTINCT flag turned on. | CDbCommand |
setDistinct() | Sets a value indicating whether SELECT DISTINCT should be used. | CDbCommand |
setFetchMode() | Set the default fetch mode for this statement | CDbCommand |
setFrom() | Sets the FROM part in the query. | CDbCommand |
setGroup() | Sets the GROUP BY part in the query. | CDbCommand |
setHaving() | Sets the HAVING part in the query. | CDbCommand |
setJoin() | Sets the join part in the query. | CDbCommand |
setLimit() | Sets the LIMIT part in the query. | CDbCommand |
setOffset() | Sets the OFFSET part in the query. | CDbCommand |
setOrder() | Sets the ORDER BY part in the query. | CDbCommand |
setSelect() | Sets the SELECT part in the query. | CDbCommand |
setText() | Specifies the SQL statement to be executed. | CDbCommand |
setUnion() | Sets the UNION part in the query. | CDbCommand |
setWhere() | Sets the WHERE part in the query. | CDbCommand |
truncateTable() | Builds and executes a SQL statement for truncating a DB table. | CDbCommand |
union() | Appends a SQL statement using UNION operator. | CDbCommand |
update() | Creates and executes an UPDATE SQL statement. | CDbCommand |
where() | Sets the WHERE part of the query. | CDbCommand |
Property Details
connection property read-only
public CDbConnection getConnection()
the connection associated with this command
distinct property (available since v1.1.6)
public boolean getDistinct()
public void setDistinct(boolean $value)
Returns a value indicating whether SELECT DISTINCT should be used.
from property (available since v1.1.6)
public string getFrom()
public void setFrom(mixed $value)
Returns the FROM part in the query.
group property (available since v1.1.6)
public string getGroup()
public void setGroup(mixed $value)
Returns the GROUP BY part in the query.
having property (available since v1.1.6)
public string getHaving()
public void setHaving(mixed $value)
Returns the HAVING part in the query.
join property (available since v1.1.6)
public mixed getJoin()
public void setJoin(mixed $value)
Returns the join part in the query.
limit property (available since v1.1.6)
public string getLimit()
public void setLimit(integer $value)
Returns the LIMIT part in the query.
offset property (available since v1.1.6)
public string getOffset()
public void setOffset(integer $value)
Returns the OFFSET part in the query.
order property (available since v1.1.6)
public string getOrder()
public void setOrder(mixed $value)
Returns the ORDER BY part in the query.
params property (available since v1.1.6)
public array $params;
the parameters (name=>value) to be bound to the current query.
pdoStatement property read-only
public PDOStatement getPdoStatement()
the underlying PDOStatement for this command It could be null if the statement is not prepared yet.
select property (available since v1.1.6)
public string getSelect()
public void setSelect(mixed $value)
Returns the SELECT part in the query.
text property
public string getText()
public static setText(string $value)
the SQL statement to be executed
union property (available since v1.1.6)
public mixed getUnion()
public void setUnion(mixed $value)
Returns the UNION part in the query.
where property (available since v1.1.6)
public string getWhere()
public void setWhere(mixed $value)
Returns the WHERE part in the query.
Method Details
__construct() method
public void __construct(CDbConnection $connection, mixed $query=NULL) | ||
$connection | CDbConnection | the database connection |
$query | mixed | the DB query to be executed. This can be either a string representing a SQL statement, or an array whose name-value pairs will be used to set the corresponding properties of the created command object. For example, you can pass in either 'SELECT * FROM tbl_user' or array('select'=>'*', 'from'=>'tbl_user') . They are equivalent in terms of the final query result. When passing the query as an array, the following properties are commonly set: select, distinct, from, where, join, group, having, order, limit, offset and union. Please refer to the setter of each of these properties for details about valid property values. This feature has been available since version 1.1.6. Since 1.1.7 it is possible to use a specific mode of data fetching by setting FetchMode. See http://www.php.net/manual/en/function.PDOStatement-setFetchMode.php for more details. |
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);
}
Constructor.
__sleep() method
public array __sleep() | ||
{return} | array |
public function __sleep()
{
$this->_statement=null;
return array_keys(get_object_vars($this));
}
Set the statement to null when serializing.
addColumn() method (available since v1.1.6)
public integer addColumn(string $table, string $column, string $type) | ||
$table | string | the table that the new column will be added to. The table name will be properly quoted by the method. |
$column | string | the name of the new column. The name will be properly quoted by the method. |
$type | string | the column type. The getColumnType method will be invoked to convert abstract column type (if any) into the physical one. Anything that is not recognized as abstract type will be kept in the generated SQL. For example, 'string' will be turned into 'varchar(255)', while 'string not null' will become 'varchar(255) not null'. |
{return} | integer | number of rows affected by the execution. |
public function addColumn($table, $column, $type)
{
return $this->setText($this->getConnection()->getSchema()->addColumn($table, $column, $type))->execute();
}
Builds and executes a SQL statement for adding a new DB column.
addForeignKey() method (available since v1.1.6)
public integer addForeignKey(string $name, string $table, string|array $columns, string $refTable, string|array $refColumns, string $delete=NULL, string $update=NULL) | ||
$name | string | the name of the foreign key constraint. |
$table | string | the table that the foreign key constraint will be added to. |
$columns | string|array | the name of the column to that the constraint will be added on. If there are multiple columns, separate them with commas or pass as an array of column names. |
$refTable | string | the table that the foreign key references to. |
$refColumns | string|array | the name of the column that the foreign key references to. If there are multiple columns, separate them with commas or pass as an array of column names. |
$delete | string | the ON DELETE option. Most DBMS support these options: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL |
$update | string | the ON UPDATE option. Most DBMS support these options: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL |
{return} | integer | number of rows affected by the execution. |
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();
}
Builds a SQL statement for adding a foreign key constraint to an existing table. The method will properly quote the table and column names.
addPrimaryKey() method (available since v1.1.13)
public integer addPrimaryKey(string $name, string $table, string|array $columns) | ||
$name | string | the name of the primary key constraint to be created. The name will be properly quoted by the method. |
$table | string | the table who will be inheriting the primary key. The name will be properly quoted by the method. |
$columns | string|array | comma separated string or array of columns that the primary key will consist of. Array value can be passed since 1.1.14. |
{return} | integer | number of rows affected by the execution. |
public function addPrimaryKey($name,$table,$columns)
{
return $this->setText($this->getConnection()->getSchema()->addPrimaryKey($name,$table,$columns))->execute();
}
Builds a SQL statement for creating a primary key constraint.
alterColumn() method (available since v1.1.6)
public integer alterColumn(string $table, string $column, string $type) | ||
$table | string | the table whose column is to be changed. The table name will be properly quoted by the method. |
$column | string | the name of the column to be changed. The name will be properly quoted by the method. |
$type | string | the new column type. The getColumnType method will be invoked to convert abstract column type (if any) into the physical one. Anything that is not recognized as abstract type will be kept in the generated SQL. For example, 'string' will be turned into 'varchar(255)', while 'string not null' will become 'varchar(255) not null'. |
{return} | integer | number of rows affected by the execution. |
public function alterColumn($table, $column, $type)
{
return $this->setText($this->getConnection()->getSchema()->alterColumn($table, $column, $type))->execute();
}
Builds and executes a SQL statement for changing the definition of a column.
andWhere() method (available since v1.1.13)
public static andWhere(mixed $conditions, array $params=array ( )) | ||
$conditions | mixed | the conditions that should be appended to the WHERE part. |
$params | array | the parameters (name=>value) to be bound to the query. |
{return} | static | the command object itself. |
public function andWhere($conditions,$params=array())
{
if(isset($this->_query['where']))
$this->_query['where']=$this->processConditions(array('AND',$this->_query['where'],$conditions));
else
$this->_query['where']=$this->processConditions($conditions);
foreach($params as $name=>$value)
$this->params[$name]=$value;
return $this;
}
Appends given condition to the existing WHERE part of the query with 'AND' operator.
This method works almost the same way as where except the fact that it appends condition with 'AND' operator, but not replaces it with the new one. For more information on parameters of this method refer to the where documentation.
bindParam() method
public static bindParam(mixed $name, mixed &$value, integer $dataType=NULL, integer $length=NULL, mixed $driverOptions=NULL) | ||
$name | mixed | Parameter identifier. For a prepared statement using named placeholders, this will be a parameter name of the form :name. For a prepared statement using question mark placeholders, this will be the 1-indexed position of the parameter. |
$value | mixed | Name of the PHP variable to bind to the SQL statement parameter |
$dataType | integer | SQL data type of the parameter. If null, the type is determined by the PHP type of the value. |
$length | integer | length of the data type |
$driverOptions | mixed | the driver-specific options (this is available since version 1.1.6) |
{return} | static | the current command being executed |
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)));
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;
}
Binds a parameter to the SQL statement to be executed.
bindValue() method
public static bindValue(mixed $name, mixed $value, integer $dataType=NULL) | ||
$name | mixed | Parameter identifier. For a prepared statement using named placeholders, this will be a parameter name of the form :name. For a prepared statement using question mark placeholders, this will be the 1-indexed position of the parameter. |
$value | mixed | The value to bind to the parameter |
$dataType | integer | SQL data type of the parameter. If null, the type is determined by the PHP type of the value. |
{return} | static | the current command being executed |
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;
}
Binds a value to a parameter.
bindValues() method (available since v1.1.5)
public static bindValues(array $values) | ||
$values | array | the values to be bound. This must be given in terms of an associative array with array keys being the parameter names, and array values the corresponding parameter values. For example, array(':name'=>'John', ':age'=>25) . |
{return} | static | the current command being executed |
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;
}
Binds a list of values to the corresponding parameters. This is similar to bindValue except that it binds multiple values. Note that the SQL data type of each value is determined by its PHP type.
buildQuery() method (available since v1.1.6)
public string buildQuery(array $query) | ||
$query | array | the query specification in name-value pairs. The following query options are supported: select, distinct, from, where, join, group, having, order, limit, offset and union. |
{return} | string | the SQL statement |
public function buildQuery($query)
{
$sql=!empty($query['distinct']) ? 'SELECT DISTINCT' : 'SELECT';
$sql.=' '.(!empty($query['select']) ? $query['select'] : '*');
if(!empty($query['from']))
$sql.="\nFROM ".$query['from'];
if(!empty($query['join']))
$sql.="\n".(is_array($query['join']) ? implode("\n",$query['join']) : $query['join']);
if(!empty($query['where']))
$sql.="\nWHERE ".$query['where'];
if(!empty($query['group']))
$sql.="\nGROUP BY ".$query['group'];
if(!empty($query['having']))
$sql.="\nHAVING ".$query['having'];
if(!empty($query['union']))
$sql.="\nUNION (\n".(is_array($query['union']) ? implode("\n) UNION (\n",$query['union']) : $query['union']) . ')';
if(!empty($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);
return $sql;
}
Builds a SQL SELECT statement from the given query specification.
cancel() method
public void cancel() |
public function cancel()
{
$this->_statement=null;
}
Cancels the execution of the SQL statement.
createIndex() method (available since v1.1.6)
public integer createIndex(string $name, string $table, string|array $columns, boolean $unique=false) | ||
$name | string | the name of the index. The name will be properly quoted by the method. |
$table | string | the table that the new index will be created for. The table name will be properly quoted by the method. |
$columns | string|array | the column(s) that should be included in the index. If there are multiple columns, please separate them by commas or pass as an array of column names. Each column name will be properly quoted by the method, unless a parenthesis is found in the name. |
$unique | boolean | whether to add UNIQUE constraint on the created index. |
{return} | integer | number of rows affected by the execution. |
public function createIndex($name, $table, $columns, $unique=false)
{
return $this->setText($this->getConnection()->getSchema()->createIndex($name, $table, $columns, $unique))->execute();
}
Builds and executes a SQL statement for creating a new index.
createTable() method (available since v1.1.6)
public integer createTable(string $table, array $columns, string $options=NULL) | ||
$table | string | the name of the table to be created. The name will be properly quoted by the method. |
$columns | array | the columns (name=>definition) in the new table. |
$options | string | additional SQL fragment that will be appended to the generated SQL. |
{return} | integer | 0 is always returned. See http://php.net/manual/en/pdostatement.rowcount.php for more information. |
public function createTable($table, $columns, $options=null)
{
return $this->setText($this->getConnection()->getSchema()->createTable($table, $columns, $options))->execute();
}
Builds and executes a SQL statement for creating a new DB table.
The columns in the new table should be specified as name-definition pairs (e.g. 'name'=>'string'), where name stands for a column name which will be properly quoted by the method, and definition stands for the column type which can contain an abstract DB type. The getColumnType method will be invoked to convert any abstract type into a physical one.
If a column is specified with definition only (e.g. 'PRIMARY KEY (name, type)'), it will be directly inserted into the generated SQL.
crossJoin() method (available since v1.1.6)
public CDbCommand crossJoin(string $table) | ||
$table | string | the table to be joined. Table name can contain schema prefix (e.g. 'public.tbl_user') and/or table alias (e.g. 'tbl_user u'). The method will automatically quote the table name unless it contains some parenthesis (which means the table is given as a sub-query or DB expression). |
{return} | CDbCommand | the command object itself |
public function crossJoin($table)
{
return $this->joinInternal('cross join', $table);
}
Appends a CROSS JOIN part to the query. Note that not all DBMS support CROSS JOIN.
delete() method (available since v1.1.6)
public integer delete(string $table, mixed $conditions='', array $params=array ( )) | ||
$table | string | the table where the data will be deleted from. |
$conditions | mixed | the conditions that will be put in the WHERE part. Please refer to where on how to specify conditions. |
$params | array | the parameters to be bound to the query. |
{return} | integer | number of rows affected by the execution. |
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);
}
Creates and executes a DELETE SQL statement.
dropColumn() method (available since v1.1.6)
public integer dropColumn(string $table, string $column) | ||
$table | string | the table whose column is to be dropped. The name will be properly quoted by the method. |
$column | string | the name of the column to be dropped. The name will be properly quoted by the method. |
{return} | integer | number of rows affected by the execution. |
public function dropColumn($table, $column)
{
return $this->setText($this->getConnection()->getSchema()->dropColumn($table, $column))->execute();
}
Builds and executes a SQL statement for dropping a DB column.
dropForeignKey() method (available since v1.1.6)
public integer dropForeignKey(string $name, string $table) | ||
$name | string | the name of the foreign key constraint to be dropped. The name will be properly quoted by the method. |
$table | string | the table whose foreign is to be dropped. The name will be properly quoted by the method. |
{return} | integer | number of rows affected by the execution. |
public function dropForeignKey($name, $table)
{
return $this->setText($this->getConnection()->getSchema()->dropForeignKey($name, $table))->execute();
}
Builds a SQL statement for dropping a foreign key constraint.
dropIndex() method (available since v1.1.6)
public integer dropIndex(string $name, string $table) | ||
$name | string | the name of the index to be dropped. The name will be properly quoted by the method. |
$table | string | the table whose index is to be dropped. The name will be properly quoted by the method. |
{return} | integer | number of rows affected by the execution. |
public function dropIndex($name, $table)
{
return $this->setText($this->getConnection()->getSchema()->dropIndex($name, $table))->execute();
}
Builds and executes a SQL statement for dropping an index.
dropPrimaryKey() method (available since v1.1.13)
public integer dropPrimaryKey(string $name, string $table) | ||
$name | string | the name of the primary key constraint to be dropped. The name will be properly quoted by the method. |
$table | string | the table that owns the primary key. The name will be properly quoted by the method. |
{return} | integer | number of rows affected by the execution. |
public function dropPrimaryKey($name,$table)
{
return $this->setText($this->getConnection()->getSchema()->dropPrimaryKey($name,$table))->execute();
}
Builds a SQL statement for dropping a primary key constraint.
dropTable() method (available since v1.1.6)
public integer dropTable(string $table) | ||
$table | string | the table to be dropped. The name will be properly quoted by the method. |
{return} | integer | 0 is always returned. See http://php.net/manual/en/pdostatement.rowcount.php for more information. |
public function dropTable($table)
{
return $this->setText($this->getConnection()->getSchema()->dropTable($table))->execute();
}
Builds and executes a SQL statement for dropping a DB table.
execute() method
public integer execute(array $params=array ( )) | ||
$params | array | input parameters (name=>value) for the SQL execution. This is an alternative to bindParam and bindValue. If you have multiple input parameters, passing them in this way can improve the performance. Note that if you pass parameters in this way, you cannot bind parameters or values using bindParam or bindValue, and vice versa. Please also note that all values are treated as strings in this case, if you need them to be handled as their real data types, you have to use bindParam or bindValue instead. |
{return} | integer | number of rows affected by the execution. |
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().$par.')','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().$par.')','system.db.CDbCommand.execute');
return $n;
}
catch(Exception $e)
{
if($this->_connection->enableProfiling)
Yii::endProfile('system.db.CDbCommand.execute('.$this->getText().$par.')','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);
}
}
Executes the SQL statement. This method is meant only for executing non-query SQL statement. No result set will be returned.
from() method (available since v1.1.6)
public static from(mixed $tables) | ||
$tables | mixed | the table(s) to be selected from. This can be either a string (e.g. 'tbl_user') or an array (e.g. array('tbl_user', 'tbl_profile')) specifying one or several table names. Table names can contain schema prefixes (e.g. 'public.tbl_user') and/or table aliases (e.g. 'tbl_user u'). The method will automatically quote the table names unless it contains some parenthesis (which means the table is given as a sub-query or DB expression). |
{return} | static | the command object itself |
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+([^ ]+)$/',$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;
}
Sets the FROM part of the query.
getConnection() method
public CDbConnection getConnection() | ||
{return} | CDbConnection | the connection associated with this command |
public function getConnection()
{
return $this->_connection;
}
getDistinct() method (available since v1.1.6)
public boolean getDistinct() | ||
{return} | boolean | a value indicating whether SELECT DISTINCT should be used. |
public function getDistinct()
{
return isset($this->_query['distinct']) ? $this->_query['distinct'] : false;
}
Returns a value indicating whether SELECT DISTINCT should be used.
getFrom() method (available since v1.1.6)
public string getFrom() | ||
{return} | string | the FROM part (without 'FROM' ) in the query. |
public function getFrom()
{
return isset($this->_query['from']) ? $this->_query['from'] : '';
}
Returns the FROM part in the query.
getGroup() method (available since v1.1.6)
public string getGroup() | ||
{return} | string | the GROUP BY part (without 'GROUP BY' ) in the query. |
public function getGroup()
{
return isset($this->_query['group']) ? $this->_query['group'] : '';
}
Returns the GROUP BY part in the query.
getHaving() method (available since v1.1.6)
public string getHaving() | ||
{return} | string | the HAVING part (without 'HAVING' ) in the query. |
public function getHaving()
{
return isset($this->_query['having']) ? $this->_query['having'] : '';
}
Returns the HAVING part in the query.
getJoin() method (available since v1.1.6)
public mixed getJoin() | ||
{return} | mixed | the join part in the query. This can be an array representing multiple join fragments, or a string representing a single join fragment. Each join fragment will contain the proper join operator (e.g. LEFT JOIN). |
public function getJoin()
{
return isset($this->_query['join']) ? $this->_query['join'] : '';
}
Returns the join part in the query.
getLimit() method (available since v1.1.6)
public string getLimit() | ||
{return} | string | the LIMIT part (without 'LIMIT' ) in the query. |
public function getLimit()
{
return isset($this->_query['limit']) ? $this->_query['limit'] : -1;
}
Returns the LIMIT part in the query.
getOffset() method (available since v1.1.6)
public string getOffset() | ||
{return} | string | the OFFSET part (without 'OFFSET' ) in the query. |
public function getOffset()
{
return isset($this->_query['offset']) ? $this->_query['offset'] : -1;
}
Returns the OFFSET part in the query.
getOrder() method (available since v1.1.6)
public string getOrder() | ||
{return} | string | the ORDER BY part (without 'ORDER BY' ) in the query. |
public function getOrder()
{
return isset($this->_query['order']) ? $this->_query['order'] : '';
}
Returns the ORDER BY part in the query.
getPdoStatement() method
public PDOStatement getPdoStatement() | ||
{return} | PDOStatement | the underlying PDOStatement for this command It could be null if the statement is not prepared yet. |
public function getPdoStatement()
{
return $this->_statement;
}
getSelect() method (available since v1.1.6)
public string getSelect() | ||
{return} | string | the SELECT part (without 'SELECT') in the query. |
public function getSelect()
{
return isset($this->_query['select']) ? $this->_query['select'] : '';
}
Returns the SELECT part in the query.
getText() method
public string getText() | ||
{return} | string | the SQL statement to be executed |
public function getText()
{
if($this->_text=='' && !empty($this->_query))
$this->setText($this->buildQuery($this->_query));
return $this->_text;
}
getUnion() method (available since v1.1.6)
public mixed getUnion() | ||
{return} | mixed | the UNION part (without 'UNION' ) in the query. This can be either a string or an array representing multiple union parts. |
public function getUnion()
{
return isset($this->_query['union']) ? $this->_query['union'] : '';
}
Returns the UNION part in the query.
getWhere() method (available since v1.1.6)
public string getWhere() | ||
{return} | string | the WHERE part (without 'WHERE' ) in the query. |
public function getWhere()
{
return isset($this->_query['where']) ? $this->_query['where'] : '';
}
Returns the WHERE part in the query.
group() method (available since v1.1.6)
public static group(mixed $columns) | ||
$columns | mixed | the columns to be grouped by. Columns can be specified in either a string (e.g. "id, name") or an array (e.g. array('id', 'name')). The method will automatically quote the column names unless a column contains some parenthesis (which means the column contains a DB expression). |
{return} | static | the command object itself |
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;
elseif(strpos($column,'(')===false)
$columns[$i]=$this->_connection->quoteColumnName($column);
}
$this->_query['group']=implode(', ',$columns);
}
return $this;
}
Sets the GROUP BY part of the query.
having() method (available since v1.1.6)
public static having(mixed $conditions, array $params=array ( )) | ||
$conditions | mixed | the conditions to be put after HAVING. Please refer to where on how to specify conditions. |
$params | array | the parameters (name=>value) to be bound to the query |
{return} | static | the command object itself |
public function having($conditions, $params=array())
{
$this->_query['having']=$this->processConditions($conditions);
foreach($params as $name=>$value)
$this->params[$name]=$value;
return $this;
}
Sets the HAVING part of the query.
insert() method (available since v1.1.6)
public integer insert(string $table, array $columns) | ||
$table | string | the table that new rows will be inserted into. |
$columns | array | the column data (name=>value) to be inserted into the table. |
{return} | integer | number of rows affected by the execution. |
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);
}
Creates and executes an INSERT SQL statement. The method will properly escape the column names, and bind the values to be inserted.
join() method (available since v1.1.6)
public CDbCommand join(string $table, mixed $conditions, array $params=array ( )) | ||
$table | string | the table to be joined. Table name can contain schema prefix (e.g. 'public.tbl_user') and/or table alias (e.g. 'tbl_user u'). The method will automatically quote the table name unless it contains some parenthesis (which means the table is given as a sub-query or DB expression). |
$conditions | mixed | the join condition that should appear in the ON part. Please refer to where on how to specify conditions. |
$params | array | the parameters (name=>value) to be bound to the query |
{return} | CDbCommand | the command object itself |
public function join($table, $conditions, $params=array())
{
return $this->joinInternal('join', $table, $conditions, $params);
}
Appends an INNER JOIN part to the query.
leftJoin() method (available since v1.1.6)
public CDbCommand leftJoin(string $table, mixed $conditions, array $params=array ( )) | ||
$table | string | the table to be joined. Table name can contain schema prefix (e.g. 'public.tbl_user') and/or table alias (e.g. 'tbl_user u'). The method will automatically quote the table name unless it contains some parenthesis (which means the table is given as a sub-query or DB expression). |
$conditions | mixed | the join condition that should appear in the ON part. Please refer to where on how to specify conditions. |
$params | array | the parameters (name=>value) to be bound to the query |
{return} | CDbCommand | the command object itself |
public function leftJoin($table, $conditions, $params=array())
{
return $this->joinInternal('left join', $table, $conditions, $params);
}
Appends a LEFT OUTER JOIN part to the query.
limit() method (available since v1.1.6)
public static limit(integer $limit, integer $offset=NULL) | ||
$limit | integer | the limit |
$offset | integer | the offset |
{return} | static | the command object itself |
public function limit($limit, $offset=null)
{
$this->_query['limit']=(int)$limit;
if($offset!==null)
$this->offset($offset);
return $this;
}
Sets the LIMIT part of the query.
naturalJoin() method (available since v1.1.6)
public CDbCommand naturalJoin(string $table) | ||
$table | string | the table to be joined. Table name can contain schema prefix (e.g. 'public.tbl_user') and/or table alias (e.g. 'tbl_user u'). The method will automatically quote the table name unless it contains some parenthesis (which means the table is given as a sub-query or DB expression). |
{return} | CDbCommand | the command object itself |
public function naturalJoin($table)
{
return $this->joinInternal('natural join', $table);
}
Appends a NATURAL JOIN part to the query. Note that not all DBMS support NATURAL JOIN.
naturalLeftJoin() method (available since v1.1.16)
public CDbCommand naturalLeftJoin(string $table) | ||
$table | string | the table to be joined. Table name can contain schema prefix (e.g. 'public.tbl_user') and/or table alias (e.g. 'tbl_user u'). The method will automatically quote the table name unless it contains some parenthesis (which means the table is given as a sub-query or DB expression). |
{return} | CDbCommand | the command object itself |
public function naturalLeftJoin($table)
{
return $this->joinInternal('natural left join', $table);
}
Appends a NATURAL LEFT JOIN part to the query. Note that not all DBMS support NATURAL LEFT JOIN.
naturalRightJoin() method (available since v1.1.16)
public CDbCommand naturalRightJoin(string $table) | ||
$table | string | the table to be joined. Table name can contain schema prefix (e.g. 'public.tbl_user') and/or table alias (e.g. 'tbl_user u'). The method will automatically quote the table name unless it contains some parenthesis (which means the table is given as a sub-query or DB expression). |
{return} | CDbCommand | the command object itself |
public function naturalRightJoin($table)
{
return $this->joinInternal('natural right join', $table);
}
Appends a NATURAL RIGHT JOIN part to the query. Note that not all DBMS support NATURAL RIGHT JOIN.
offset() method (available since v1.1.6)
public static offset(integer $offset) | ||
$offset | integer | the offset |
{return} | static | the command object itself |
public function offset($offset)
{
$this->_query['offset']=(int)$offset;
return $this;
}
Sets the OFFSET part of the query.
orWhere() method (available since v1.1.13)
public static orWhere(mixed $conditions, array $params=array ( )) | ||
$conditions | mixed | the conditions that should be appended to the WHERE part. |
$params | array | the parameters (name=>value) to be bound to the query. |
{return} | static | the command object itself. |
public function orWhere($conditions,$params=array())
{
if(isset($this->_query['where']))
$this->_query['where']=$this->processConditions(array('OR',$this->_query['where'],$conditions));
else
$this->_query['where']=$this->processConditions($conditions);
foreach($params as $name=>$value)
$this->params[$name]=$value;
return $this;
}
Appends given condition to the existing WHERE part of the query with 'OR' operator.
This method works almost the same way as where except the fact that it appends condition with 'OR' operator, but not replaces it with the new one. For more information on parameters of this method refer to the where documentation.
order() method (available since v1.1.6)
public static order(mixed $columns) | ||
$columns | mixed | the columns (and the directions) to be ordered by. Columns can be specified in either a string (e.g. "id ASC, name DESC") or an array (e.g. array('id ASC', 'name DESC')). The method will automatically quote the column names unless a column contains some parenthesis (which means the column contains a DB expression). For example, to get "ORDER BY 1" you should use $criteria->order('(1)'); |
{return} | static | the command object itself |
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;
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;
}
Sets the ORDER BY part of the query.
prepare() method
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);
}
}
}
Prepares the SQL statement to be executed. For complex SQL statement that is to be executed multiple times, this may improve performance. For SQL statement with binding parameters, this method is invoked automatically.
query() method
public CDbDataReader query(array $params=array ( )) | ||
$params | array | input parameters (name=>value) for the SQL execution. This is an alternative to bindParam and bindValue. If you have multiple input parameters, passing them in this way can improve the performance. Note that if you pass parameters in this way, you cannot bind parameters or values using bindParam or bindValue, and vice versa. Please also note that all values are treated as strings in this case, if you need them to be handled as their real data types, you have to use bindParam or bindValue instead. |
{return} | CDbDataReader | the reader object for fetching the query result |
public function query($params=array())
{
return $this->queryInternal('',0,$params);
}
Executes the SQL statement and returns query result. This method is for executing an SQL query that returns result set.
queryAll() method
public array queryAll(boolean $fetchAssociative=true, array $params=array ( )) | ||
$fetchAssociative | boolean | whether each row should be returned as an associated array with column names as the keys or the array keys are column indexes (0-based). |
$params | array | input parameters (name=>value) for the SQL execution. This is an alternative to bindParam and bindValue. If you have multiple input parameters, passing them in this way can improve the performance. Note that if you pass parameters in this way, you cannot bind parameters or values using bindParam or bindValue, and vice versa. Please also note that all values are treated as strings in this case, if you need them to be handled as their real data types, you have to use bindParam or bindValue instead. |
{return} | array | all rows of the query result. Each array element is an array representing a row. An empty array is returned if the query results in nothing. |
public function queryAll($fetchAssociative=true,$params=array())
{
return $this->queryInternal('fetchAll',$fetchAssociative ? $this->_fetchMode : PDO::FETCH_NUM, $params);
}
Executes the SQL statement and returns all rows.
queryColumn() method
public array queryColumn(array $params=array ( )) | ||
$params | array | input parameters (name=>value) for the SQL execution. This is an alternative to bindParam and bindValue. If you have multiple input parameters, passing them in this way can improve the performance. Note that if you pass parameters in this way, you cannot bind parameters or values using bindParam or bindValue, and vice versa. Please also note that all values are treated as strings in this case, if you need them to be handled as their real data types, you have to use bindParam or bindValue instead. |
{return} | array | the first column of the query result. Empty array if no result. |
public function queryColumn($params=array())
{
return $this->queryInternal('fetchAll',array(PDO::FETCH_COLUMN, 0),$params);
}
Executes the SQL statement and returns the first column of the result. This is a convenient method of query when only the first column of data is needed. Note, the column returned will contain the first element in each row of result.
queryRow() method
public mixed queryRow(boolean $fetchAssociative=true, array $params=array ( )) | ||
$fetchAssociative | boolean | whether the row should be returned as an associated array with column names as the keys or the array keys are column indexes (0-based). |
$params | array | input parameters (name=>value) for the SQL execution. This is an alternative to bindParam and bindValue. If you have multiple input parameters, passing them in this way can improve the performance. Note that if you pass parameters in this way, you cannot bind parameters or values using bindParam or bindValue, and vice versa. Please also note that all values are treated as strings in this case, if you need them to be handled as their real data types, you have to use bindParam or bindValue instead. |
{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);
}
Executes the SQL statement and returns the first row of the result. This is a convenient method of query when only the first row of data is needed.
queryScalar() method
public mixed queryScalar(array $params=array ( )) | ||
$params | array | input parameters (name=>value) for the SQL execution. This is an alternative to bindParam and bindValue. If you have multiple input parameters, passing them in this way can improve the performance. Note that if you pass parameters in this way, you cannot bind parameters or values using bindParam or bindValue, and vice versa. Please also note that all values are treated as strings in this case, if you need them to be handled as their real data types, you have to use bindParam or bindValue instead. |
{return} | mixed | the value of the first column in the first row of the query result. False is returned if there is no value. |
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;
}
Executes the SQL statement and returns the value of the first column in the first row of data. This is a convenient method of query when only a single scalar value is needed (e.g. obtaining the count of the records).
renameColumn() method (available since v1.1.6)
public integer renameColumn(string $table, string $name, string $newName) | ||
$table | string | the table whose column is to be renamed. The name will be properly quoted by the method. |
$name | string | the old name of the column. The name will be properly quoted by the method. |
$newName | string | the new name of the column. The name will be properly quoted by the method. |
{return} | integer | number of rows affected by the execution. |
public function renameColumn($table, $name, $newName)
{
return $this->setText($this->getConnection()->getSchema()->renameColumn($table, $name, $newName))->execute();
}
Builds and executes a SQL statement for renaming a column.
renameTable() method (available since v1.1.6)
public integer renameTable(string $table, string $newName) | ||
$table | string | the table to be renamed. The name will be properly quoted by the method. |
$newName | string | the new table name. The name will be properly quoted by the method. |
{return} | integer | 0 is always returned. See http://php.net/manual/en/pdostatement.rowcount.php for more information. |
public function renameTable($table, $newName)
{
return $this->setText($this->getConnection()->getSchema()->renameTable($table, $newName))->execute();
}
Builds and executes a SQL statement for renaming a DB table.
reset() method (available since v1.1.6)
public static reset() | ||
{return} | static | this command instance |
public function reset()
{
$this->_text=null;
$this->_query=null;
$this->_statement=null;
$this->_paramLog=array();
$this->params=array();
return $this;
}
Cleans up the command and prepares for building a new query. This method is mainly used when a command object is being reused multiple times for building different queries. Calling this method will clean up all internal states of the command object.
rightJoin() method (available since v1.1.6)
public CDbCommand rightJoin(string $table, mixed $conditions, array $params=array ( )) | ||
$table | string | the table to be joined. Table name can contain schema prefix (e.g. 'public.tbl_user') and/or table alias (e.g. 'tbl_user u'). The method will automatically quote the table name unless it contains some parenthesis (which means the table is given as a sub-query or DB expression). |
$conditions | mixed | the join condition that should appear in the ON part. Please refer to where on how to specify conditions. |
$params | array | the parameters (name=>value) to be bound to the query |
{return} | CDbCommand | the command object itself |
public function rightJoin($table, $conditions, $params=array())
{
return $this->joinInternal('right join', $table, $conditions, $params);
}
Appends a RIGHT OUTER JOIN part to the query.
select() method (available since v1.1.6)
public static select(mixed $columns='*', string $option='') | ||
$columns | mixed | the columns to be selected. Defaults to '*', meaning all columns. Columns can be specified in either a string (e.g. "id, name") or an array (e.g. array('id', 'name')). Columns can contain table prefixes (e.g. "tbl_user.id") and/or column aliases (e.g. "tbl_user.id AS user_id"). The method will automatically quote the column names unless a column contains some parenthesis (which means the column contains a DB expression). |
$option | string | additional option that should be appended to the 'SELECT' keyword. For example, in MySQL, the option 'SQL_CALC_FOUND_ROWS' can be used. This parameter is supported since version 1.1.8. |
{return} | static | the command object itself |
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;
elseif(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;
}
Sets the SELECT part of the query.
selectDistinct() method (available since v1.1.6)
public CDbCommand selectDistinct(mixed $columns='*') | ||
$columns | mixed | the columns to be selected. See select for more details. |
{return} | CDbCommand | the command object itself |
public function selectDistinct($columns='*')
{
$this->_query['distinct']=true;
return $this->select($columns);
}
Sets the SELECT part of the query with the DISTINCT flag turned on. This is the same as select except that the DISTINCT flag is turned on.
setDistinct() method (available since v1.1.6)
public void setDistinct(boolean $value) | ||
$value | boolean | a value indicating whether SELECT DISTINCT should be used. |
public function setDistinct($value)
{
$this->_query['distinct']=$value;
}
Sets a value indicating whether SELECT DISTINCT should be used.
setFetchMode() method (available since v1.1.7)
public static setFetchMode(mixed $mode) | ||
$mode | mixed | fetch mode |
{return} | static |
public function setFetchMode($mode)
{
$params=func_get_args();
$this->_fetchMode = $params;
return $this;
}
Set the default fetch mode for this statement
setFrom() method (available since v1.1.6)
public void setFrom(mixed $value) | ||
$value | mixed | the tables to be selected from. Please refer to from() for details on how to specify this parameter. |
public function setFrom($value)
{
$this->from($value);
}
Sets the FROM part in the query.
setGroup() method (available since v1.1.6)
public void setGroup(mixed $value) | ||
$value | mixed | the GROUP BY part. Please refer to group() for details on how to specify this parameter. |
public function setGroup($value)
{
$this->group($value);
}
Sets the GROUP BY part in the query.
setHaving() method (available since v1.1.6)
public void setHaving(mixed $value) | ||
$value | mixed | the HAVING part. Please refer to having() for details on how to specify this parameter. |
public function setHaving($value)
{
$this->having($value);
}
Sets the HAVING part in the query.
setJoin() method (available since v1.1.6)
public void setJoin(mixed $value) | ||
$value | mixed | the join part in the query. This can be either a string or an array representing multiple join parts in the query. Each part must contain the proper join operator (e.g. 'LEFT JOIN tbl_profile ON tbl_user.id=tbl_profile.id') |
public function setJoin($value)
{
$this->_query['join']=$value;
}
Sets the join part in the query.
setLimit() method (available since v1.1.6)
public void setLimit(integer $value) | ||
$value | integer | the LIMIT part. Please refer to limit() for details on how to specify this parameter. |
public function setLimit($value)
{
$this->limit($value);
}
Sets the LIMIT part in the query.
setOffset() method (available since v1.1.6)
public void setOffset(integer $value) | ||
$value | integer | the OFFSET part. Please refer to offset() for details on how to specify this parameter. |
public function setOffset($value)
{
$this->offset($value);
}
Sets the OFFSET part in the query.
setOrder() method (available since v1.1.6)
public void setOrder(mixed $value) | ||
$value | mixed | the ORDER BY part. Please refer to order() for details on how to specify this parameter. |
public function setOrder($value)
{
$this->order($value);
}
Sets the ORDER BY part in the query.
setSelect() method (available since v1.1.6)
public void setSelect(mixed $value) | ||
$value | mixed | the data to be selected. Please refer to select() for details on how to specify this parameter. |
public function setSelect($value)
{
$this->select($value);
}
Sets the SELECT part in the query.
setText() method
public static setText(string $value) | ||
$value | string | the SQL statement to be executed |
{return} | static | this command instance |
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;
}
Specifies the SQL statement to be executed. Any previous execution will be terminated or cancel.
setUnion() method (available since v1.1.6)
public void setUnion(mixed $value) | ||
$value | mixed | the UNION part. This can be either a string or an array representing multiple SQL statements to be unioned together. |
public function setUnion($value)
{
$this->_query['union']=$value;
}
Sets the UNION part in the query.
setWhere() method (available since v1.1.6)
public void setWhere(mixed $value) | ||
$value | mixed | the where part. Please refer to where() for details on how to specify this parameter. |
public function setWhere($value)
{
$this->where($value);
}
Sets the WHERE part in the query.
truncateTable() method (available since v1.1.6)
public integer truncateTable(string $table) | ||
$table | string | the table to be truncated. The name will be properly quoted by the method. |
{return} | integer | number of rows affected by the execution. |
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;
}
Builds and executes a SQL statement for truncating a DB table.
union() method (available since v1.1.6)
public static union(string $sql) | ||
$sql | string | the SQL statement to be appended using UNION |
{return} | static | the command object itself |
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;
}
Appends a SQL statement using UNION operator.
update() method (available since v1.1.6)
public integer update(string $table, array $columns, mixed $conditions='', array $params=array ( )) | ||
$table | string | the table to be updated. |
$columns | array | the column data (name=>value) to be updated. |
$conditions | mixed | the conditions that will be put in the WHERE part. Please refer to where on how to specify conditions. |
$params | array | the parameters to be bound to the query. Do not use column names as parameter names here. They are reserved for $columns parameter. |
{return} | integer | number of rows affected by the execution. |
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);
}
Creates and executes an UPDATE SQL statement. The method will properly escape the column names and bind the values to be updated.
where() method (available since v1.1.6)
public static where(mixed $conditions, array $params=array ( )) | ||
$conditions | mixed | the conditions that should be put in the WHERE part. |
$params | array | the parameters (name=>value) to be bound to the query |
{return} | static | the command object itself |
public function where($conditions, $params=array())
{
$this->_query['where']=$this->processConditions($conditions);
foreach($params as $name=>$value)
$this->params[$name]=$value;
return $this;
}
Sets the WHERE part of the query.
The method requires a $conditions parameter, and optionally a $params parameter specifying the values to be bound to the query.
The $conditions parameter should be either a string (e.g. 'id=1') or an array. If the latter, it must be of the format array(operator, operand1, operand2, ...)
, where the operator can be one of the followings, and the possible operands depend on the corresponding operator:
-
and
: the operands should be concatenated together using AND. For example, array('and', 'id=1', 'id=2') will generate 'id=1 AND id=2'. If an operand is an array, it will be converted into a string using the same rules described here. For example, array('and', 'type=1', array('or', 'id=1', 'id=2')) will generate 'type=1 AND (id=1 OR id=2)'. The method will NOT do any quoting or escaping. -
or
: similar as theand
operator except that the operands are concatenated using OR. -
in
: operand 1 should be a column or DB expression, and operand 2 be an array representing the range of the values that the column or DB expression should be in. For example, array('in', 'id', array(1,2,3)) will generate 'id IN (1,2,3)'. The method will properly quote the column name and escape values in the range. -
not in
: similar as thein
operator except that IN is replaced with NOT IN in the generated condition. -
like
: operand 1 should be a column or DB expression, and operand 2 be a string or an array representing the values that the column or DB expression should be like. For example, array('like', 'name', '%tester%') will generate "name LIKE '%tester%'". When the value range is given as an array, multiple LIKE predicates will be generated and concatenated using AND. For example, array('like', 'name', array('%test%', '%sample%')) will generate "name LIKE '%test%' AND name LIKE '%sample%'". The method will properly quote the column name and escape values in the range. -
not like
: similar as thelike
operator except that LIKE is replaced with NOT LIKE in the generated condition. -
or like
: similar as thelike
operator except that OR is used to concatenated the LIKE predicates. -
or not like
: similar as thenot like
operator except that OR is used to concatenated the NOT LIKE predicates.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CDbCommand