CDbCommand
| Пакет | system.db |
|---|---|
| Наследование | class CDbCommand » CComponent |
| С момента | 1.0 |
| Исходный код | framework/db/CDbCommand.php |
Обычно он создаётся с помощью вызова CDbConnection::createCommand. SQL-запрос для выполнения может быть задан через Text.
Для выполнения невыборочного SQL-запроса (например, insert, delete, update), используйте execute. Для выполнения SQL-запроса, возвращающего набор результатов (например, SELECT), используйте query или его удобные версии queryRow, queryColumn или queryScalar.
Если SQL-запрос возвращает результаты (например, SELECT SQL), к ним можно получить доступ через возвращённый CDbDataReader.
CDbCommand поддерживает подготовку SQL-запросов и привязку параметров. Для привязки PHP-переменной к параметру в SQL вызовите bindParam. Для привязки значения к параметру SQL вызовите bindValue. При привязке параметра SQL-запрос автоматически подготавливается. Также вы можете явно подготовить SQL-запрос, вызвав prepare.
Начиная с версии 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 | параметры (имя=>значение) для привязки к текущему запросу. | 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 |
| addPrimaryKey() | Создает оператор SQL для создания ограничения первичного ключа. | CDbCommand |
| alterColumn() | Создает и выполняет оператор SQL для изменения определения столбца. | CDbCommand |
| andWhere() | Добавляет заданное условие к существующей части WHERE запроса с оператором 'AND'. | CDbCommand |
| asa() | Возвращает объект именованного поведения. | CComponent |
| attachBehavior() | Прикрепляет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Прикрепляет список поведений к компоненту. | CComponent |
| attachEventHandler() | Прикрепляет обработчик событий к событию. | CComponent |
| bindParam() | Привязывает параметр к оператору SQL, который будет выполнен. | 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() | Создает и выполняет оператор SQL DELETE. | CDbCommand |
| detachBehavior() | Открепляет поведение от компонента. | CComponent |
| detachBehaviors() | Открепляет все поведения от компонента. | CComponent |
| detachEventHandler() | Открепляет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает прикрепленное поведение. | CComponent |
| disableBehaviors() | Отключает все прикрепленные к этому компоненту поведения. | CComponent |
| dropColumn() | Создает и выполняет оператор SQL для удаления столбца БД. | CDbCommand |
| dropForeignKey() | Создает оператор SQL для удаления ограничения внешнего ключа. | CDbCommand |
| dropIndex() | Создает и выполняет оператор SQL для удаления индекса. | CDbCommand |
| dropPrimaryKey() | Создает оператор 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 INSERT. | CDbCommand |
| join() | Добавляет часть INNER JOIN к запросу. | CDbCommand |
| leftJoin() | Добавляет часть LEFT OUTER JOIN к запросу. | CDbCommand |
| limit() | Устанавливает часть LIMIT запроса. | CDbCommand |
| naturalJoin() | Добавляет часть NATURAL JOIN к запросу. | CDbCommand |
| naturalLeftJoin() | Добавляет часть NATURAL LEFT JOIN к запросу. | CDbCommand |
| naturalRightJoin() | Добавляет часть NATURAL RIGHT JOIN к запросу. | CDbCommand |
| offset() | Устанавливает часть OFFSET запроса. | CDbCommand |
| orWhere() | Добавляет заданное условие к существующей части WHERE запроса с оператором 'OR'. | 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() | Добавляет SQL-запрос с помощью оператора UNION. | CDbCommand |
| update() | Создаёт и выполняет SQL-запрос UPDATE. | CDbCommand |
| where() | Устанавливает часть WHERE запроса. | CDbCommand |
Подробное описание свойств
connection свойство только для чтения
public CDbConnection getConnection()
соединение, связанное с этой командой
distinct свойство (доступно с версии v1.1.6)
public boolean getDistinct()
public void setDistinct(boolean $value)
Возвращает значение, указывающее, нужно ли использовать SELECT DISTINCT.
from свойство (доступно с версии v1.1.6)
public string getFrom()
public void setFrom(mixed $value)
Возвращает часть FROM в запросе.
group свойство (доступно с версии v1.1.6)
public string getGroup()
public void setGroup(mixed $value)
Возвращает часть GROUP BY в запросе.
having свойство (доступно с версии v1.1.6)
public string getHaving()
public void setHaving(mixed $value)
Возвращает часть HAVING в запросе.
join свойство (доступно с версии v1.1.6)
public mixed getJoin()
public void setJoin(mixed $value)
Возвращает часть join в запросе.
limit свойство (доступно с версии v1.1.6)
public string getLimit()
public void setLimit(integer $value)
Возвращает часть LIMIT в запросе.
offset свойство (доступно с версии v1.1.6)
public string getOffset()
public void setOffset(integer $value)
Возвращает часть OFFSET в запросе.
order свойство (доступно с версии v1.1.6)
public string getOrder()
public void setOrder(mixed $value)
Возвращает часть ORDER BY в запросе.
params свойство (доступно с версии v1.1.6)
public array $params;
параметры (имя=>значение) для связывания с текущим запросом.
pdoStatement свойство только для чтения
public PDOStatement getPdoStatement()
базовый PDOStatement для этой команды. Может быть null, если запрос ещё не подготовлен.
select свойство (доступно с версии v1.1.6)
public string getSelect()
public void setSelect(mixed $value)
Возвращает часть SELECT в запросе.
text свойство
public string getText()
public static setText(string $value)
SQL-запрос, который будет выполнен
union свойство (доступно с версии v1.1.6)
public mixed getUnion()
public void setUnion(mixed $value)
Возвращает часть UNION в запросе.
where свойство (доступно с версии v1.1.6)
public string getWhere()
public void setWhere(mixed $value)
Возвращает часть WHERE в запросе.
Подробное описание методов
__construct() метод
public void __construct(CDbConnection $connection, mixed $query=NULL) | ||
| $connection | CDbConnection | соединение с базой данных |
| $query | mixed | запрос БД для выполнения. Это может быть строка, представляющая SQL-запрос, или массив, пары имя-значение которого будут использованы для установки соответствующих свойств созданного объекта команды. Например, вы можете передать либо 'SELECT * FROM tbl_user' либо array('select'=>'*', 'from'=>'tbl_user'). Они эквивалентны с точки зрения конечного результата запроса. При передаче запроса в виде массива обычно устанавливаются следующие свойства: select, distinct, from, where, join, group, having, order, limit, offset и union. Подробнее о допустимых значениях свойств см. в методах-сеттерах каждого из этих свойств. Эта возможность доступна с версии 1.1.6. С версии 1.1.7 можно использовать определённый режим извлечения данных, установив FetchMode. Для получения более подробной информации см. http://www.php.net/manual/en/function.PDOStatement-setFetchMode.php. |
public function __construct(CDbConnection $connection,$query=null)
{
$this->_connection=$connection;
if(is_array($query))
{
foreach($query as $name=>$value)
$this->$name=$value;
}
else
$this->setText($query);
}
Конструктор.
__sleep() метод
public array __sleep() | ||
| {return} | array | |
public function __sleep()
{
$this->_statement=null;
return array_keys(get_object_vars($this));
}
Устанавливает значение оператора в null при сериализации.
addColumn() метод (доступен начиная с v1.1.6)
public integer addColumn(string $table, string $column, string $type) | ||
| $table | строка | таблица, к которой будет добавлена новая колонка. Имя таблицы будет корректно обрамлено кавычками методом. |
| $column | строка | имя новой колонки. Имя будет корректно обрамлено кавычками методом. |
| $type | строка | тип колонки. Метод getColumnType будет вызван для преобразования абстрактного типа колонки (если есть) в физический. Всё, что не распознаётся как абстрактный тип, сохранится в сгенерированном SQL. Например, 'string' будет преобразовано в 'varchar(255)', а 'string not null' — в 'varchar(255) not null'. |
| {return} | целое число | количество изменённых строк в результате выполнения. |
public function addColumn($table, $column, $type)
{
return $this->setText($this->getConnection()->getSchema()->addColumn($table, $column, $type))->execute();
}
Строит и выполняет SQL-оператор для добавления новой колонки в БД.
addForeignKey() метод (доступен начиная с v1.1.6)
public integer addForeignKey(string $name, string $table, string|array $columns, string $refTable, string|array $refColumns, string $delete=NULL, string $update=NULL) | ||
| $name | строка | имя внешнего ключа. |
| $table | строка | таблица, к которой будет добавлен внешний ключ. |
| $columns | строка|массив | имя колонки, к которой будет применен ограничитель. Если ограничитель применяется к нескольким колонкам, разделите их запятыми или передайте массив имён колонок. |
| $refTable | строка | таблица, к которой ссылается внешний ключ. |
| $refColumns | строка|массив | имя колонки, к которой ссылается внешний ключ. Если ограничитель применяется к нескольким колонкам, разделите их запятыми или передайте массив имён колонок. |
| $delete | строка | опция ON DELETE. Большинство СУБД поддерживают следующие опции: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL |
| $update | строка | опция ON UPDATE. Большинство СУБД поддерживают следующие опции: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL |
| {return} | целое число | количество изменённых строк в результате выполнения. |
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-оператор для добавления ограничения внешнего ключа к существующей таблице. Метод корректно обрамляет кавычками имена таблиц и колонок.
addPrimaryKey() метод (доступен начиная с v1.1.13)
public integer addPrimaryKey(string $name, string $table, string|array $columns) | ||
| $name | строка | имя ограничения первичного ключа, которое будет создано. Имя будет корректно обрамлено кавычками методом. |
| $table | строка | таблица, которая будет наследовать первичный ключ. Имя будет корректно обрамлено кавычками методом. |
| $columns | строка|массив | строка с именами колонок, разделённых запятыми, или массив колонок, составляющих первичный ключ. Массив значений может быть передан с версии 1.1.14. |
| {return} | целое число | количество изменённых строк в результате выполнения. |
public function addPrimaryKey($name,$table,$columns)
{
return $this->setText($this->getConnection()->getSchema()->addPrimaryKey($name,$table,$columns))->execute();
}
Строит SQL-оператор для создания ограничения первичного ключа.
alterColumn() метод (доступен начиная с v1.1.6)
public integer alterColumn(string $table, string $column, string $type) | ||
| $table | строка | таблица, колонка которой будет изменена. Имя таблицы будет корректно обрамлено кавычками методом. |
| $column | строка | имя колонки, которая будет изменена. Имя будет корректно обрамлено кавычками методом. |
| $type | строка | новый тип колонки. Метод getColumnType будет вызван для преобразования абстрактного типа колонки (если есть) в физический. Всё, что не распознаётся как абстрактный тип, сохранится в сгенерированном SQL. Например, 'string' будет преобразовано в 'varchar(255)', а 'string not null' — в 'varchar(255) not null'. |
| {return} | целое число | количество изменённых строк в результате выполнения. |
public function alterColumn($table, $column, $type)
{
return $this->setText($this->getConnection()->getSchema()->alterColumn($table, $column, $type))->execute();
}
Строит и выполняет SQL-оператор для изменения определения колонки.
andWhere() метод (доступен начиная с v1.1.13)
public static andWhere(mixed $conditions, array $params=array ( )) | ||
| $conditions | смешанный тип | условия, которые должны быть добавлены к части WHERE. |
| $params | массив | параметры (имя=>значение), которые должны быть привязаны к запросу. |
| {return} | статический | сам объект команды. |
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;
}
Добавляет данное условие к существующей части WHERE запроса с оператором 'И'.
Этот метод работает почти так же, как where, за исключением того, что он добавляет условие с оператором 'И', а не заменяет его новым. Для получения дополнительной информации о параметрах этого метода обратитесь к документации where.
bindParam() метод
public static bindParam(mixed $name, mixed &$value, integer $dataType=NULL, integer $length=NULL, mixed $driverOptions=NULL) | ||
| $name | смешанный тип | Идентификатор параметра. Для подготовленного оператора с именованными плейсхолдерами, это будет имя параметра вида :имя. Для подготовленного оператора с плейсхолдерами в виде знака вопроса, это будет индекс параметра (с 1). |
| $value | смешанный тип | Имя PHP-переменной, которая будет связана с параметром SQL-оператора |
| $dataType | целое число | Тип данных SQL параметра. Если null, тип определяется типом значения в PHP. |
| $length | целое число | длина типа данных |
| $driverOptions | смешанный тип | параметры, специфичные для драйвера (доступно с версии 1.1.6) |
| {return} | статический | текущая выполняемая команда |
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;
}
Связывает параметр с SQL-оператором, который будет выполнен.
bindValue() метод
public static bindValue(mixed $name, mixed $value, integer $dataType=NULL) | ||
| $name | смешанный тип | Идентификатор параметра. Для подготовленного оператора с именованными плейсхолдерами, это будет имя параметра вида :имя. Для подготовленного оператора с плейсхолдерами в виде знака вопроса, это будет индекс параметра (с 1). |
| $value | смешанный тип | Значение, которое будет привязано к параметру |
| $dataType | целое число | Тип данных SQL параметра. Если null, тип определяется типом значения в PHP. |
| {return} | статический | текущая выполняемая команда |
public function bindValue($name, $value, $dataType=null)
{
$this->prepare();
if($dataType===null)
$this->_statement->bindValue($name,$value,$this->_connection->getPdoType(gettype($value)));
else
$this->_statement->bindValue($name,$value,$dataType);
$this->_paramLog[$name]=$value;
return $this;
}
Привязывает значение к параметру.
bindValues() метод (доступен начиная с v1.1.5)
public static bindValues(array $values) | ||
| $values | массив | значения, которые нужно привязать. Массив должен быть ассоциативным, где ключи — имена параметров, а значения — соответствующие значения параметров. Например, array(':name'=>'John', ':age'=>25). |
| {return} | статический | текущая выполняемая команда |
public function bindValues($values)
{
$this->prepare();
foreach($values as $name=>$value)
{
$this->_statement->bindValue($name,$value,$this->_connection->getPdoType(gettype($value)));
$this->_paramLog[$name]=$value;
}
return $this;
}
Привязывает список значений к соответствующим параметрам. Это аналогично bindValue, но привязывает несколько значений. Обратите внимание, что тип данных SQL каждого значения определяется его типом PHP.
buildQuery() метод (доступен начиная с v1.1.6)
public string buildQuery(array $query) | ||
| $query | массив | спецификация запроса в виде пар имя-значение. Поддерживаются следующие опции запроса: select, distinct, from, where, join, group, having, order, limit, offset и union. |
| {return} | строка | SQL-запрос |
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;
}
Создает SQL-запрос SELECT из заданной спецификации запроса.
cancel() метод
public void cancel() |
public function cancel()
{
$this->_statement=null;
}
Отменяет выполнение SQL-запроса.
createIndex() метод (доступен начиная с v1.1.6)
public integer createIndex(string $name, string $table, string|array $columns, boolean $unique=false) | ||
| $name | строка | имя индекса. Метод корректно его обработает (добавит кавычки). |
| $table | строка | таблица, для которой создается новый индекс. Имя таблицы будет обработано (добавит кавычки). |
| $columns | строка|массив | столбец(ы), которые должны быть включены в индекс. Если столбцов несколько, разделяйте их запятыми или передайте как массив имён столбцов. Каждое имя столбца будет корректно обработано (добавит кавычки), если в нём не содержатся скобки. |
| $unique | булево | добавлять ли ограничение UNIQUE к создаваемому индексу. |
| {return} | целое число | количество изменённых строк. |
public function createIndex($name, $table, $columns, $unique=false)
{
return $this->setText($this->getConnection()->getSchema()->createIndex($name, $table, $columns, $unique))->execute();
}
Создаёт и выполняет SQL-запрос для создания нового индекса.
createTable() метод (доступен начиная с v1.1.6)
public integer createTable(string $table, array $columns, string $options=NULL) | ||
| $table | строка | имя таблицы, которую нужно создать. Имя будет корректно обработано (добавит кавычки). |
| $columns | массив | столбцы (имя=>описание) в новой таблице. |
| $options | строка | дополнительный SQL-фрагмент, который будет добавлен к сгенерированному SQL. |
| {return} | целое число | всегда возвращает 0. Смотрите http://php.net/manual/en/pdostatement.rowcount.php для получения дополнительной информации. |
public function createTable($table, $columns, $options=null)
{
return $this->setText($this->getConnection()->getSchema()->createTable($table, $columns, $options))->execute();
}
Создаёт и выполняет SQL-запрос для создания новой таблицы базы данных.
Столбцы новой таблицы должны быть указаны в виде пар «имя=>описание» (например, 'name'=>'string'), где имя — имя столбца, которое будет корректно обработано (добавлено в кавычки) методом, а описание — тип столбца, который может содержать абстрактный тип БД. Метод getColumnType будет вызван для преобразования любого абстрактного типа в физический.
Если столбец задаётся только описанием (например, 'PRIMARY KEY (name, type)'), он будет непосредственно вставлен в сгенерированный SQL.
crossJoin() метод (доступен начиная с v1.1.6)
public CDbCommand crossJoin(string $table) | ||
| $table | строка | таблица, которая должна быть присоединена. Имя таблицы может содержать префикс схемы (например, 'public.tbl_user') и/или псевдоним таблицы (например, 'tbl_user u'). Метод автоматически добавит кавычки к имени таблицы, если оно не содержит скобок (что означает, что таблица задана как подзапрос или выражение БД). |
| {return} | CDbCommand | сам объект команды |
public function crossJoin($table)
{
return $this->joinInternal('cross join', $table);
}
Добавляет часть CROSS JOIN к запросу. Обратите внимание, что не все СУБД поддерживают CROSS JOIN.
delete() метод (доступен начиная с v1.1.6)
public integer delete(string $table, mixed $conditions='', array $params=array ( )) | ||
| $table | строка | таблица, из которой будут удалены данные. |
| $conditions | смешанный тип | условия, которые будут помещены в часть WHERE. Обратитесь к where для получения информации о том, как задавать условия. |
| $params | массив | параметры, которые нужно привязать к запросу. |
| {return} | целое число | количество изменённых строк. |
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);
}
Создаёт и выполняет SQL-запрос DELETE.
dropColumn() метод (доступен начиная с v1.1.6)
public integer dropColumn(string $table, string $column) | ||
| $table | строка | таблица, из которой нужно удалить столбец. Имя будет корректно обработано (добавит кавычки). |
| $column | строка | имя столбца, который нужно удалить. Имя будет корректно обработано (добавит кавычки). |
| {return} | целое число | количество изменённых строк. |
public function dropColumn($table, $column)
{
return $this->setText($this->getConnection()->getSchema()->dropColumn($table, $column))->execute();
}
Создаёт и выполняет SQL-запрос для удаления столбца БД.
dropForeignKey() метод (доступен начиная с v1.1.6)
public integer dropForeignKey(string $name, string $table) | ||
| $name | строка | имя внешнего ключа, которое нужно удалить. Имя будет корректно обработано (добавлено в кавычки) методом. |
| $table | строка | таблица, из которой нужно удалить внешний ключ. Имя будет корректно обработано (добавлено в кавычки). |
| {return} | целое число | количество изменённых строк. |
public function dropForeignKey($name, $table)
{
return $this->setText($this->getConnection()->getSchema()->dropForeignKey($name, $table))->execute();
}
Создаёт SQL-запрос для удаления внешнего ключа.
dropIndex() метод (доступен начиная с v1.1.6)
public integer dropIndex(string $name, string $table) | ||
| $name | строка | имя индекса, который нужно удалить. Имя будет корректно обрамлено кавычками методом. |
| $table | строка | таблица, из которой нужно удалить индекс. Имя будет корректно обрамлено кавычками методом. |
| {return} | целое число | количество строк, затронутых выполнением. |
public function dropIndex($name, $table)
{
return $this->setText($this->getConnection()->getSchema()->dropIndex($name, $table))->execute();
}
Создаёт и выполняет SQL-запрос для удаления индекса.
dropPrimaryKey() метод (доступен с версии v1.1.13)
public integer dropPrimaryKey(string $name, string $table) | ||
| $name | строка | имя ограничения первичного ключа, которое нужно удалить. Имя будет корректно обрамлено кавычками методом. |
| $table | строка | таблица, которая владеет первичным ключом. Имя будет корректно обрамлено кавычками методом. |
| {return} | целое число | количество строк, затронутых выполнением. |
public function dropPrimaryKey($name,$table)
{
return $this->setText($this->getConnection()->getSchema()->dropPrimaryKey($name,$table))->execute();
}
Создаёт SQL-запрос для удаления ограничения первичного ключа.
dropTable() метод (доступен с версии v1.1.6)
public integer dropTable(string $table) | ||
| $table | строка | таблица, которую нужно удалить. Имя будет корректно обрамлено кавычками методом. |
| {return} | целое число | всегда возвращает 0. См. http://php.net/manual/ru/pdostatement.rowcount.php для получения дополнительной информации. |
public function dropTable($table)
{
return $this->setText($this->getConnection()->getSchema()->dropTable($table))->execute();
}
Создаёт и выполняет SQL-запрос для удаления таблицы БД.
execute() метод
public integer execute(array $params=array ( )) | ||
| $params | массив | параметры ввода (имя=>значение) для выполнения SQL-запроса. Это альтернатива методам bindParam и bindValue. Если у вас несколько параметров ввода, передача их таким образом может повысить производительность. Обратите внимание, что если вы передаёте параметры таким образом, вы не можете связывать параметры или значения с помощью bindParam или bindValue, и наоборот. Также обратите внимание, что все значения в этом случае обрабатываются как строки. Если вам нужно, чтобы они обрабатывались как их реальные типы данных, вы должны использовать bindParam или bindValue вместо этого. |
| {return} | целое число | количество строк, затронутых выполнением. |
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);
}
}
Выполняет SQL-запрос. Этот метод предназначен только для выполнения SQL-запросов, не возвращающих результат. Набор результатов не будет возвращён.
from() метод (доступен с версии v1.1.6)
public static from(mixed $tables) | ||
| $tables | смешанный тип | таблица(ы) для выбора. Это может быть строка (например, 'tbl_user') или массив (например, array('tbl_user', 'tbl_profile')), указывающий одно или несколько имён таблиц. Имена таблиц могут содержать префиксы схемы (например, 'public.tbl_user') и/или псевдонимы таблиц (например, 'tbl_user u'). Метод автоматически обрамит имена таблиц кавычками, если они не содержат скобок (что означает, что таблица задана как подзапрос или выражение БД). |
| {return} | статический | сам объект команды |
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;
}
Устанавливает часть FROM запроса.
getConnection() метод
public CDbConnection getConnection() | ||
| {return} | CDbConnection | соединение, связанное с этой командой |
public function getConnection()
{
return $this->_connection;
}
getDistinct() метод (доступен с версии v1.1.6)
public boolean getDistinct() | ||
| {return} | логический | значение, указывающее, нужно ли использовать SELECT DISTINCT. |
public function getDistinct()
{
return isset($this->_query['distinct']) ? $this->_query['distinct'] : false;
}
Возвращает значение, указывающее, нужно ли использовать SELECT DISTINCT.
getFrom() метод (доступен с версии v1.1.6)
public string getFrom() | ||
| {return} | строка | часть FROM (без 'FROM') в запросе. |
public function getFrom()
{
return isset($this->_query['from']) ? $this->_query['from'] : '';
}
Возвращает часть FROM в запросе.
getGroup() метод (доступен с версии v1.1.6)
public string getGroup() | ||
| {return} | строка | часть GROUP BY (без 'GROUP BY') в запросе. |
public function getGroup()
{
return isset($this->_query['group']) ? $this->_query['group'] : '';
}
Возвращает часть GROUP BY в запросе.
getHaving() метод (доступен с версии v1.1.6)
public string getHaving() | ||
| {return} | строка | часть HAVING (без 'HAVING') в запросе. |
public function getHaving()
{
return isset($this->_query['having']) ? $this->_query['having'] : '';
}
Возвращает часть HAVING в запросе.
getJoin() метод (доступен с версии v1.1.6)
public mixed getJoin() | ||
| {return} | смешанный тип | часть join в запросе. Это может быть массив, представляющий несколько фрагментов join, или строка, представляющая один фрагмент join. Каждый фрагмент join будет содержать соответствующий оператор join (например, LEFT JOIN). |
public function getJoin()
{
return isset($this->_query['join']) ? $this->_query['join'] : '';
}
Возвращает часть join в запросе.
getLimit() метод (доступен с версии v1.1.6)
public string getLimit() | ||
| {return} | строка | часть LIMIT (без 'LIMIT') в запросе. |
public function getLimit()
{
return isset($this->_query['limit']) ? $this->_query['limit'] : -1;
}
Возвращает часть LIMIT в запросе.
getOffset() метод (доступен с версии v1.1.6)
public string getOffset() | ||
| {return} | строка | часть OFFSET (без 'OFFSET') в запросе. |
public function getOffset()
{
return isset($this->_query['offset']) ? $this->_query['offset'] : -1;
}
Возвращает часть OFFSET в запросе.
getOrder() метод (доступен с версии v1.1.6)
public string getOrder() | ||
| {return} | string | часть ORDER BY (без 'ORDER BY') в запросе. |
public function getOrder()
{
return isset($this->_query['order']) ? $this->_query['order'] : '';
}
Возвращает часть ORDER BY в запросе.
getPdoStatement() метод
public PDOStatement getPdoStatement() | ||
| {return} | PDOStatement | базовый объект PDOStatement для данного запроса. Может быть null, если запрос ещё не подготовлен. |
public function getPdoStatement()
{
return $this->_statement;
}
getSelect() метод (доступен с версии v1.1.6)
public string getSelect() | ||
| {return} | string | часть SELECT (без 'SELECT') в запросе. |
public function getSelect()
{
return isset($this->_query['select']) ? $this->_query['select'] : '';
}
Возвращает часть SELECT в запросе.
getText() метод
public string getText() | ||
| {return} | string | SQL-запрос для выполнения |
public function getText()
{
if($this->_text=='' && !empty($this->_query))
$this->setText($this->buildQuery($this->_query));
return $this->_text;
}
getUnion() метод (доступен с версии v1.1.6)
public mixed getUnion() | ||
| {return} | mixed | часть UNION (без 'UNION') в запросе. Может быть строкой или массивом, представляющим несколько частей UNION. |
public function getUnion()
{
return isset($this->_query['union']) ? $this->_query['union'] : '';
}
Возвращает часть UNION в запросе.
getWhere() метод (доступен с версии v1.1.6)
public string getWhere() | ||
| {return} | string | часть WHERE (без 'WHERE') в запросе. |
public function getWhere()
{
return isset($this->_query['where']) ? $this->_query['where'] : '';
}
Возвращает часть WHERE в запросе.
group() метод (доступен с версии v1.1.6)
public static group(mixed $columns) | ||
| $columns | mixed | столбцы для группировки. Столбцы могут быть указаны в виде строки (например, "id, name") или массива (например, array('id', 'name')). Метод автоматически приводит имена столбцов к каноническому виду, за исключением случаев, когда столбец содержит скобки (то есть, является выражением). |
| {return} | static | сам объект команды |
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;
}
Устанавливает часть GROUP BY запроса.
having() метод (доступен с версии v1.1.6)
public static having(mixed $conditions, array $params=array ( )) | ||
| $conditions | mixed | условия, которые должны быть помещены после HAVING. См. where, чтобы узнать, как задавать условия. |
| $params | array | параметры (имя=>значение) для связывания с запросом |
| {return} | static | сам объект команды |
public function having($conditions, $params=array())
{
$this->_query['having']=$this->processConditions($conditions);
foreach($params as $name=>$value)
$this->params[$name]=$value;
return $this;
}
Устанавливает часть HAVING запроса.
insert() метод (доступен с версии v1.1.6)
public integer insert(string $table, array $columns) | ||
| $table | string | таблица, в которую будут добавлены новые строки. |
| $columns | array | данные столбцов (имя=>значение) для вставки в таблицу. |
| {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-запрос INSERT. Метод корректно экранирует имена столбцов и связывает значения для вставки.
join() метод (доступен с версии v1.1.6)
public CDbCommand join(string $table, mixed $conditions, array $params=array ( )) | ||
| $table | string | таблица для объединения. Имя таблицы может содержать префикс схемы (например, 'public.tbl_user') и/или псевдоним таблицы (например, 'tbl_user u'). Метод автоматически приводит имя таблицы к каноническому виду, за исключением случаев, когда таблица задаётся в виде подзапроса или выражения. |
| $conditions | mixed | условие объединения, которое должно появиться в части ON. См. where, чтобы узнать, как задавать условия. |
| $params | array | параметры (имя=>значение) для связывания с запросом |
| {return} | CDbCommand | сам объект команды |
public function join($table, $conditions, $params=array())
{
return $this->joinInternal('join', $table, $conditions, $params);
}
Добавляет часть INNER JOIN к запросу.
leftJoin() метод (доступен с версии v1.1.6)
public CDbCommand leftJoin(string $table, mixed $conditions, array $params=array ( )) | ||
| $table | string | таблица для объединения. Имя таблицы может содержать префикс схемы (например, 'public.tbl_user') и/или псевдоним таблицы (например, 'tbl_user u'). Метод автоматически приводит имя таблицы к каноническому виду, за исключением случаев, когда таблица задаётся в виде подзапроса или выражения. |
| $conditions | mixed | условие объединения, которое должно появиться в части ON. См. where, чтобы узнать, как задавать условия. |
| $params | array | параметры (имя=>значение) для связывания с запросом |
| {return} | CDbCommand | сам объект команды |
public function leftJoin($table, $conditions, $params=array())
{
return $this->joinInternal('left join', $table, $conditions, $params);
}
Добавляет часть LEFT OUTER JOIN к запросу.
limit() метод (доступен с версии v1.1.6)
public static limit(integer $limit, integer $offset=NULL) | ||
| $limit | integer | предел |
| $offset | integer | смещение |
| {return} | static | сам объект команды |
public function limit($limit, $offset=null)
{
$this->_query['limit']=(int)$limit;
if($offset!==null)
$this->offset($offset);
return $this;
}
Устанавливает часть LIMIT запроса.
naturalJoin() метод (доступен с версии v1.1.6)
public CDbCommand naturalJoin(string $table) | ||
| $table | строка | таблица, к которой должно быть выполнено объединение. Имя таблицы может содержать префикс схемы (например, 'public.tbl_user') и/или псевдоним таблицы (например, 'tbl_user u'). Метод автоматически приводит имя таблицы к кавычкам, если оно не содержит скобок (что означает, что таблица задана как подзапрос или выражение базы данных). |
| {return} | CDbCommand | сам объект команды |
public function naturalJoin($table)
{
return $this->joinInternal('natural join', $table);
}
Добавляет часть NATURAL JOIN к запросу. Обратите внимание, что не все СУБД поддерживают NATURAL JOIN.
naturalLeftJoin() метод (доступен начиная с версии v1.1.16)
public CDbCommand naturalLeftJoin(string $table) | ||
| $table | строка | таблица, к которой должно быть выполнено объединение. Имя таблицы может содержать префикс схемы (например, 'public.tbl_user') и/или псевдоним таблицы (например, 'tbl_user u'). Метод автоматически приводит имя таблицы к кавычкам, если оно не содержит скобок (что означает, что таблица задана как подзапрос или выражение базы данных). |
| {return} | CDbCommand | сам объект команды |
public function naturalLeftJoin($table)
{
return $this->joinInternal('natural left join', $table);
}
Добавляет часть NATURAL LEFT JOIN к запросу. Обратите внимание, что не все СУБД поддерживают NATURAL LEFT JOIN.
naturalRightJoin() метод (доступен начиная с версии v1.1.16)
public CDbCommand naturalRightJoin(string $table) | ||
| $table | строка | таблица, к которой должно быть выполнено объединение. Имя таблицы может содержать префикс схемы (например, 'public.tbl_user') и/или псевдоним таблицы (например, 'tbl_user u'). Метод автоматически приводит имя таблицы к кавычкам, если оно не содержит скобок (что означает, что таблица задана как подзапрос или выражение базы данных). |
| {return} | CDbCommand | сам объект команды |
public function naturalRightJoin($table)
{
return $this->joinInternal('natural right join', $table);
}
Добавляет часть NATURAL RIGHT JOIN к запросу. Обратите внимание, что не все СУБД поддерживают NATURAL RIGHT JOIN.
offset() метод (доступен начиная с версии v1.1.6)
public static offset(integer $offset) | ||
| $offset | целое число | смещение |
| {return} | статический | сам объект команды |
public function offset($offset)
{
$this->_query['offset']=(int)$offset;
return $this;
}
Устанавливает часть OFFSET запроса.
orWhere() метод (доступен начиная с версии v1.1.13)
public static orWhere(mixed $conditions, array $params=array ( )) | ||
| $conditions | смешанный тип | условия, которые должны быть добавлены к части WHERE. |
| $params | массив | параметры (имя=>значение) для привязки к запросу. |
| {return} | статический | сам объект команды. |
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;
}
Добавляет данное условие к существующей части WHERE запроса с оператором 'ИЛИ'.
Этот метод работает практически так же, как where, за исключением того, что он добавляет условие с оператором 'ИЛИ', а не заменяет его новым. Для получения дополнительной информации о параметрах этого метода обратитесь к документации where.
order() метод (доступен начиная с версии v1.1.6)
public static order(mixed $columns) | ||
| $columns | смешанный тип | столбцы (и направления) для сортировки. Столбцы могут быть заданы либо строкой (например, "id ASC, name DESC"), либо массивом (например, array('id ASC', 'name DESC')). Метод автоматически приводит имена столбцов к кавычкам, если столбец не содержит скобок (что означает, что столбец содержит выражение базы данных). Например, чтобы получить "ORDER BY 1", вы должны использовать
$criteria->order('(1)');
|
| {return} | статический | сам объект команды |
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;
}
Устанавливает часть ORDER BY запроса.
prepare() метод
public void prepare() |
public function prepare()
{
if($this->_statement==null)
{
try
{
$this->_statement=$this->getConnection()->getPdoInstance()->prepare($this->getText());
$this->_paramLog=array();
}
catch(Exception $e)
{
Yii::log('Error in preparing SQL: '.$this->getText(),CLogger::LEVEL_ERROR,'system.db.CDbCommand');
$errorInfo=$e instanceof PDOException ? $e->errorInfo : null;
throw new CDbException(Yii::t('yii','CDbCommand failed to prepare the SQL statement: {error}',
array('{error}'=>$e->getMessage())),(int)$e->getCode(),$errorInfo);
}
}
}
Подготавливает SQL-запрос для выполнения. Для сложных SQL-запросов, которые должны выполняться несколько раз, это может улучшить производительность. Для SQL-запросов с параметрами привязки этот метод вызывается автоматически.
query() метод
public CDbDataReader query(array $params=array ( )) | ||
| $params | массив | входные параметры (имя=>значение) для выполнения SQL. Это альтернатива bindParam и bindValue. Если у вас несколько входных параметров, передача их таким образом может повысить производительность. Обратите внимание, что если вы передаете параметры таким образом, вы не можете привязать параметры или значения с помощью bindParam или bindValue, и наоборот. Также обратите внимание, что все значения в этом случае обрабатываются как строки. Если вам нужно, чтобы они обрабатывались как реальные типы данных, вам необходимо использовать bindParam или bindValue вместо этого. |
| {return} | CDbDataReader | объект-читатель для извлечения результата запроса |
public function query($params=array())
{
return $this->queryInternal('',0,$params);
}
Выполняет SQL-запрос и возвращает результат запроса. Этот метод предназначен для выполнения SQL-запроса, возвращающего набор результатов.
queryAll() метод
public array queryAll(boolean $fetchAssociative=true, array $params=array ( )) | ||
| $fetchAssociative | булево | указывает, должны ли возвращаться каждый ряд в виде ассоциативного массива с именами столбцов в качестве ключей или ключи массива — индексы столбцов (нумерация с 0). |
| $params | массив | входные параметры (имя=>значение) для выполнения SQL. Это альтернатива bindParam и bindValue. Если у вас несколько входных параметров, передача их таким образом может повысить производительность. Обратите внимание, что если вы передаете параметры таким образом, вы не можете привязать параметры или значения с помощью bindParam или bindValue, и наоборот. Также обратите внимание, что все значения в этом случае обрабатываются как строки. Если вам нужно, чтобы они обрабатывались как реальные типы данных, вам необходимо использовать bindParam или bindValue вместо этого. |
| {return} | массив | все строки результата запроса. Каждый элемент массива — массив, представляющий строку. Пустой массив возвращается, если запрос ничего не возвращает. |
public function queryAll($fetchAssociative=true,$params=array())
{
return $this->queryInternal('fetchAll',$fetchAssociative ? $this->_fetchMode : PDO::FETCH_NUM, $params);
}
Выполняет SQL-запрос и возвращает все строки.
queryColumn() метод
public array queryColumn(array $params=array ( )) | ||
| $params | array | параметры ввода (имя=>значение) для выполнения SQL-запроса. Это альтернатива bindParam и bindValue. Если у вас несколько входных параметров, передача их таким образом может повысить производительность. Обратите внимание, что если вы передаете параметры таким образом, вы не можете привязать параметры или значения с помощью bindParam или bindValue, и наоборот. Также обратите внимание, что все значения в этом случае обрабатываются как строки; если вам необходимо обработать их как реальные типы данных, необходимо использовать bindParam или bindValue. |
| {return} | array | первый столбец результата запроса. Пустой массив, если результат отсутствует. |
public function queryColumn($params=array())
{
return $this->queryInternal('fetchAll',array(PDO::FETCH_COLUMN, 0),$params);
}
Выполняет SQL-запрос и возвращает первый столбец результата. Это удобный метод query, когда нужен только первый столбец данных. Обратите внимание, что возвращаемый столбец будет содержать первый элемент в каждой строке результата.
queryRow() метод
public mixed queryRow(boolean $fetchAssociative=true, array $params=array ( )) | ||
| $fetchAssociative | boolean | указывает, должна ли строка возвращаться как ассоциативный массив с именами столбцов в качестве ключей или ключи массива являются индексами столбцов (нумерация с 0). |
| $params | array | параметры ввода (имя=>значение) для выполнения SQL-запроса. Это альтернатива bindParam и bindValue. Если у вас несколько входных параметров, передача их таким образом может повысить производительность. Обратите внимание, что если вы передаете параметры таким образом, вы не можете привязать параметры или значения с помощью bindParam или bindValue, и наоборот. Также обратите внимание, что все значения в этом случае обрабатываются как строки; если вам необходимо обработать их как реальные типы данных, необходимо использовать bindParam или bindValue. |
| {return} | mixed | первая строка (в терминах массива) результата запроса, false, если результат отсутствует. |
public function queryRow($fetchAssociative=true,$params=array())
{
return $this->queryInternal('fetch',$fetchAssociative ? $this->_fetchMode : PDO::FETCH_NUM, $params);
}
Выполняет SQL-запрос и возвращает первую строку результата. Это удобный метод query, когда нужна только первая строка данных.
queryScalar() метод
public mixed queryScalar(array $params=array ( )) | ||
| $params | array | параметры ввода (имя=>значение) для выполнения SQL-запроса. Это альтернатива bindParam и bindValue. Если у вас несколько входных параметров, передача их таким образом может повысить производительность. Обратите внимание, что если вы передаете параметры таким образом, вы не можете привязать параметры или значения с помощью 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, когда нужно только одно скалярное значение (например, получение количества записей).
renameColumn() метод (доступен с версии v1.1.6)
public integer renameColumn(string $table, string $name, string $newName) | ||
| $table | string | таблица, имя столбца которой необходимо переименовать. Метод корректно обработает имя. |
| $name | string | старое имя столбца. Метод корректно обработает имя. |
| $newName | string | новое имя столбца. Метод корректно обработает имя. |
| {return} | integer | количество строк, затронутых выполнением. |
public function renameColumn($table, $name, $newName)
{
return $this->setText($this->getConnection()->getSchema()->renameColumn($table, $name, $newName))->execute();
}
Создает и выполняет SQL-запрос для переименования столбца.
renameTable() метод (доступен с версии v1.1.6)
public integer renameTable(string $table, string $newName) | ||
| $table | string | таблица, которую нужно переименовать. Метод корректно обработает имя. |
| $newName | string | новое имя таблицы. Метод корректно обработает имя. |
| {return} | integer | всегда возвращает 0. См. http://php.net/manual/en/pdostatement.rowcount.php для получения дополнительной информации. |
public function renameTable($table, $newName)
{
return $this->setText($this->getConnection()->getSchema()->renameTable($table, $newName))->execute();
}
Создает и выполняет SQL-запрос для переименования таблицы БД.
reset() метод (доступен с версии v1.1.6)
public static reset() | ||
| {return} | static | экземпляр этого объекта команды |
public function reset()
{
$this->_text=null;
$this->_query=null;
$this->_statement=null;
$this->_paramLog=array();
$this->params=array();
return $this;
}
Очищает команду и подготавливает для создания нового запроса. Этот метод в основном используется, когда объект команды используется повторно несколько раз для создания разных запросов. Вызов этого метода очистит все внутренние состояния объекта команды.
rightJoin() метод (доступен с версии v1.1.6)
public CDbCommand rightJoin(string $table, mixed $conditions, array $params=array ( )) | ||
| $table | string | таблица, которая должна быть присоединена. Имя таблицы может содержать префикс схемы (например, 'public.tbl_user') и/или псевдоним таблицы (например, 'tbl_user u'). Метод автоматически обработает имя таблицы, за исключением случаев, когда оно содержит скобки (это означает, что таблица задана как подзапрос или выражение БД). |
| $conditions | mixed | условие объединения, которое должно появиться в части ON. Обратитесь к where для указания условий. |
| $params | array | параметры (имя=>значение) для привязки к запросу |
| {return} | CDbCommand | сам объект команды |
public function rightJoin($table, $conditions, $params=array())
{
return $this->joinInternal('right join', $table, $conditions, $params);
}
Добавляет часть RIGHT OUTER JOIN к запросу.
select() метод (доступен с версии v1.1.6)
public static select(mixed $columns='*', string $option='') | ||
| $columns | mixed | столбцы, которые должны быть выбраны. По умолчанию — «*», что означает все столбцы. Столбцы могут быть указаны либо в строке (например, «id, name»), либо в массиве (например, array('id', 'name')). Столбцы могут содержать префиксы таблиц (например, «tbl_user.id») и/или псевдонимы столбцов (например, «tbl_user.id AS user_id»). Метод автоматически обработает имена столбцов, за исключением случаев, когда столбец содержит скобки (что означает, что столбец содержит выражение БД). |
| $option | string | дополнительный параметр, который должен быть добавлен к ключевому слову «SELECT». Например, в MySQL параметр «SQL_CALC_FOUND_ROWS» может быть использован. Этот параметр поддерживается с версии 1.1.8. |
| {return} | static | сам объект команды |
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;
}
Устанавливает часть SELECT запроса.
selectDistinct() метод (доступен с версии v1.1.6)
public CDbCommand selectDistinct(mixed $columns='*') | ||
| $columns | mixed | выбираемые столбцы. Для получения дополнительной информации смотрите select. |
| {return} | CDbCommand | сам объект команды |
public function selectDistinct($columns='*')
{
$this->_query['distinct']=true;
return $this->select($columns);
}
Устанавливает часть SELECT запроса с включённым флагом DISTINCT. Это то же самое, что и select, за исключением того, что флаг DISTINCT включён.
setDistinct() метод (доступен с версии v1.1.6)
public void setDistinct(boolean $value) | ||
| $value | boolean | значение, указывающее, следует ли использовать SELECT DISTINCT. |
public function setDistinct($value)
{
$this->_query['distinct']=$value;
}
Устанавливает значение, указывающее, следует ли использовать SELECT DISTINCT.
setFetchMode() метод (доступен с версии v1.1.7)
public static setFetchMode(mixed $mode) | ||
| $mode | mixed | режим извлечения данных |
| {return} | static | |
public function setFetchMode($mode)
{
$params=func_get_args();
$this->_fetchMode = $params;
return $this;
}
Установить режим извлечения по умолчанию для этого оператора
setFrom() метод (доступен с версии v1.1.6)
public void setFrom(mixed $value) | ||
| $value | mixed | таблицы для выбора данных. Подробности о том, как указать этот параметр, см. в from(). |
public function setFrom($value)
{
$this->from($value);
}
Устанавливает часть FROM в запросе.
setGroup() метод (доступен с версии v1.1.6)
public void setGroup(mixed $value) | ||
| $value | mixed | часть GROUP BY. Подробности о том, как указать этот параметр, см. в group(). |
public function setGroup($value)
{
$this->group($value);
}
Устанавливает часть GROUP BY в запросе.
setHaving() метод (доступен с версии v1.1.6)
public void setHaving(mixed $value) | ||
| $value | mixed | часть HAVING. Подробности о том, как указать этот параметр, см. в having(). |
public function setHaving($value)
{
$this->having($value);
}
Устанавливает часть HAVING в запросе.
setJoin() метод (доступен с версии v1.1.6)
public void setJoin(mixed $value) | ||
| $value | mixed | часть join в запросе. Это может быть строка или массив, представляющий несколько частей join в запросе. Каждая часть должна содержать правильный оператор join (например, 'LEFT JOIN tbl_profile ON tbl_user.id=tbl_profile.id'). |
public function setJoin($value)
{
$this->_query['join']=$value;
}
Устанавливает часть join в запросе.
setLimit() метод (доступен с версии v1.1.6)
public void setLimit(integer $value) | ||
| $value | integer | часть LIMIT. Подробности о том, как указать этот параметр, см. в limit(). |
public function setLimit($value)
{
$this->limit($value);
}
Устанавливает часть LIMIT в запросе.
setOffset() метод (доступен с версии v1.1.6)
public void setOffset(integer $value) | ||
| $value | integer | часть OFFSET. Подробности о том, как указать этот параметр, см. в offset(). |
public function setOffset($value)
{
$this->offset($value);
}
Устанавливает часть OFFSET в запросе.
setOrder() метод (доступен с версии v1.1.6)
public void setOrder(mixed $value) | ||
| $value | mixed | часть ORDER BY. Подробности о том, как указать этот параметр, см. в order(). |
public function setOrder($value)
{
$this->order($value);
}
Устанавливает часть ORDER BY в запросе.
setSelect() метод (доступен с версии v1.1.6)
public void setSelect(mixed $value) | ||
| $value | mixed | данные для выбора. Подробности о том, как указать этот параметр, см. в select(). |
public function setSelect($value)
{
$this->select($value);
}
Устанавливает часть SELECT в запросе.
setText() метод
public static setText(string $value) | ||
| $value | string | SQL-запрос для выполнения |
| {return} | static | экземпляр этой команды |
public function setText($value)
{
if($this->_connection->tablePrefix!==null && $value!='')
$this->_text=preg_replace('/{{(.*?)}}/',$this->_connection->tablePrefix.'\1',$value);
else
$this->_text=$value;
$this->cancel();
return $this;
}
Указывает SQL-запрос для выполнения. Любое предыдущее выполнение будет прервано или отменено.
setUnion() метод (доступен с версии v1.1.6)
public void setUnion(mixed $value) | ||
| $value | mixed | часть UNION. Это может быть строка или массив, представляющий несколько SQL-запросов, которые объединяются вместе. |
public function setUnion($value)
{
$this->_query['union']=$value;
}
Устанавливает часть UNION в запросе.
setWhere() метод (доступен с версии v1.1.6)
public void setWhere(mixed $value) | ||
| $value | mixed | часть where. Подробности о том, как указать этот параметр, см. в where(). |
public function setWhere($value)
{
$this->where($value);
}
Устанавливает часть WHERE в запросе.
truncateTable() метод (доступен с версии v1.1.6)
public integer truncateTable(string $table) | ||
| $table | string | таблица, которая будет усечена. Имя будет корректно обработано методом. |
| {return} | integer | число строк, затронутых выполнением. |
public function truncateTable($table)
{
$schema=$this->getConnection()->getSchema();
$n=$this->setText($schema->truncateTable($table))->execute();
if(strncasecmp($this->getConnection()->getDriverName(),'sqlite',6)===0)
$schema->resetSequence($schema->getTable($table));
return $n;
}
Строит и выполняет SQL-запрос для усечения таблицы БД.
union() метод (доступен начиная с v1.1.6)
public static union(string $sql) | ||
| $sql | строка | SQL-запрос, который будет добавлен с помощью UNION |
| {return} | статический | сам объект команды |
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;
}
Добавляет SQL-запрос с помощью оператора UNION.
update() метод (доступен начиная с v1.1.6)
public integer update(string $table, array $columns, mixed $conditions='', array $params=array ( )) | ||
| $table | строка | таблица, которая будет обновлена. |
| $columns | массив | данные столбцов (имя=>значение) для обновления. |
| $conditions | смешанный тип | условия, которые будут помещены в часть WHERE. Обратитесь к where, чтобы узнать, как задать условия. |
| $params | массив | параметры, которые будут связаны с запросом. Не используйте имена столбцов в качестве имён параметров. Они зарезервированы для $columns параметра. |
| {return} | целое число | количество строк, затронутых выполнением. |
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);
}
Создаёт и выполняет SQL-запрос UPDATE. Метод правильно экранирует имена столбцов и связывает обновляемые значения.
where() метод (доступен начиная с v1.1.6)
public static where(mixed $conditions, array $params=array ( )) | ||
| $conditions | смешанный тип | условия, которые должны быть помещены в часть WHERE. |
| $params | массив | параметры (имя=>значение) для привязки к запросу |
| {return} | статический | сам объект команды |
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 должен быть столбцом или выражением БД, а операнд 2 — массивом, представляющим диапазон значений, в котором должен находиться столбец или выражение БД. Например, array('in', 'id', array(1,2,3)) сгенерирует 'id IN (1,2,3)'. Метод правильно цитирует имя столбца и экранирует значения в диапазоне. -
not in: аналогично операторуinза исключением того, что IN заменяется на NOT IN в сгенерированном условии. -
like: операнд 1 должен быть столбцом или выражением БД, а операнд 2 — строкой или массивом, представляющим значения, которым должен удовлетворять столбец или выражение БД. Например, 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за исключением того, что LIKE заменяется на NOT LIKE в сгенерированном условии. -
or like: аналогично операторуlikeза исключением того, что для конкатенации предикатов LIKE используется OR. -
or not like: аналогично операторуnot likeза исключением того, что для конкатенации предикатов NOT LIKE используется OR.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CDbCommand