Package | system.db |
---|---|
Inheritance | class CDbConnection » CApplicationComponent » CComponent |
Implements | IApplicationComponent |
Since | 1.0 |
Version | $Id$ |
Source Code | framework/db/CDbConnection.php |
$connection=new CDbConnection($dsn,$username,$password); $connection->active=true;
$command=$connection->createCommand($sqlStatement); $command->execute(); // a non-query SQL statement execution // or execute an SQL query and fetch the result set $reader=$command->query(); // each $row is an array representing a row of data foreach($reader as $row) ...
$command=$connection->createCommand($sqlStatement); $command->bindParam($name1,$value1); $command->bindParam($name2,$value2); $command->execute();
$transaction=$connection->beginTransaction(); try { $connection->createCommand($sql1)->execute(); $connection->createCommand($sql2)->execute(); //.... other SQL executions $transaction->commit(); } catch(Exception $e) { $transaction->rollBack(); }
array( 'components'=>array( 'db'=>array( 'class'=>'CDbConnection', 'connectionString'=>'sqlite:path/to/dbfile', ), ), )
Property | Type | Description | Defined By |
---|---|---|---|
active | boolean | whether the DB connection is established | CDbConnection |
autoCommit | boolean | whether creating or updating a DB record will be automatically committed. | CDbConnection |
autoConnect | boolean | whether the database connection should be automatically established the component is being initialized. | CDbConnection |
behaviors | array | the behaviors that should be attached to this component. | CApplicationComponent |
charset | string | the charset used for database connection. | CDbConnection |
clientVersion | string | the version information of the DB driver | CDbConnection |
columnCase | mixed | the case of the column names | CDbConnection |
commandBuilder | CDbCommandBuilder | Returns the SQL command builder for the current DB connection. | CDbConnection |
connectionStatus | string | the status of the connection Some DBMS (such as sqlite) may not support this feature. | CDbConnection |
connectionString | string | The Data Source Name, or DSN, contains the information required to connect to the database. | CDbConnection |
currentTransaction | CDbTransaction | the currently active transaction. | CDbConnection |
driverName | string | name of the DB driver | CDbConnection |
emulatePrepare | boolean | whether to turn on prepare emulation. | CDbConnection |
enableParamLogging | boolean | whether to log the values that are bound to a prepare SQL statement. | CDbConnection |
enableProfiling | boolean | whether to enable profiling the SQL statements being executed. | CDbConnection |
isInitialized | boolean | whether this application component has been initialized (i.e., init() is invoked. | CApplicationComponent |
lastInsertID | string | Returns the ID of the last inserted row or sequence value. | CDbConnection |
nullConversion | mixed | how the null and empty strings are converted | CDbConnection |
password | string | the password for establishing DB connection. | CDbConnection |
pdoInstance | PDO | the PDO instance, null if the connection is not established yet | CDbConnection |
persistent | boolean | whether the connection is persistent or not Some DBMS (such as sqlite) may not support this feature. | CDbConnection |
prefetch | boolean | whether the connection performs data prefetching | CDbConnection |
schema | CDbSchema | the database schema for the current connection | CDbConnection |
schemaCacheID | string | the ID of the cache application component that is used to cache the table metadata. | CDbConnection |
schemaCachingDuration | integer | number of seconds that table metadata can remain valid in cache. | CDbConnection |
schemaCachingExclude | array | list of tables whose metadata should NOT be cached. | CDbConnection |
serverInfo | string | the information of DBMS server | CDbConnection |
serverVersion | string | the version information of DBMS server | CDbConnection |
stats | array | Returns the statistical results of SQL executions. | CDbConnection |
timeout | int | timeout settings for the connection | CDbConnection |
username | string | the username for establishing DB connection. | CDbConnection |
Method | Description | Defined By |
---|---|---|
__call() | Calls the named method which is not a class method. | CComponent |
__construct() | Constructor. | CDbConnection |
__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() | Close the connection when serializing. | CDbConnection |
__unset() | Sets a component property to be null. | CComponent |
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 |
beginTransaction() | Starts a transaction. | CDbConnection |
canGetProperty() | Determines whether a property can be read. | CComponent |
canSetProperty() | Determines whether a property can be set. | CComponent |
createCommand() | Creates a command for execution. | CDbConnection |
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 |
enableBehavior() | Enables an attached behavior. | CComponent |
enableBehaviors() | Enables all behaviors attached to this component. | CComponent |
getActive() | Returns whether the DB connection is established | CDbConnection |
getAttribute() | Obtains a specific DB connection attribute information. | CDbConnection |
getAutoCommit() | Returns whether creating or updating a DB record will be automatically committed. Some DBMS (such as sqlite) may not support this feature. | CDbConnection |
getAvailableDrivers() | Returns list of available PDO drivers | CDbConnection |
getClientVersion() | Returns the version information of the DB driver | CDbConnection |
getColumnCase() | Returns the case of the column names | CDbConnection |
getCommandBuilder() | Returns the SQL command builder for the current DB connection. | CDbConnection |
getConnectionStatus() | Returns the status of the connection Some DBMS (such as sqlite) may not support this feature. | CDbConnection |
getCurrentTransaction() | Returns the currently active transaction. Null if no active transaction. | CDbConnection |
getDriverName() | Returns name of the DB driver | CDbConnection |
getEventHandlers() | Returns the list of attached event handlers for an event. | CComponent |
getIsInitialized() | Checks whether this application component has been initialized (i.e., init() is invoked.) | CApplicationComponent |
getLastInsertID() | Returns the ID of the last inserted row or sequence value. | CDbConnection |
getNullConversion() | Returns how the null and empty strings are converted | CDbConnection |
getPdoInstance() | Returns the PDO instance, null if the connection is not established yet | CDbConnection |
getPdoType() | Determines the PDO type for the specified PHP type. | CDbConnection |
getPersistent() | Returns whether the connection is persistent or not Some DBMS (such as sqlite) may not support this feature. | CDbConnection |
getPrefetch() | Returns whether the connection performs data prefetching | CDbConnection |
getSchema() | Returns the database schema for the current connection | CDbConnection |
getServerInfo() | Returns the information of DBMS server | CDbConnection |
getServerVersion() | Returns the version information of DBMS server | CDbConnection |
getStats() | Returns the statistical results of SQL executions. | CDbConnection |
getTimeout() | Returns timeout settings for the connection | CDbConnection |
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 |
init() | Initializes the component. | CDbConnection |
quoteColumnName() | Quotes a column name for use in a query. | CDbConnection |
quoteTableName() | Quotes a table name for use in a query. | CDbConnection |
quoteValue() | Quotes a string value for use in a query. | CDbConnection |
raiseEvent() | Raises an event. | CComponent |
setActive() | Open or close the DB connection. | CDbConnection |
setAttribute() | Sets an attribute on the database connection. | CDbConnection |
setAutoCommit() | Sets whether creating or updating a DB record will be automatically committed. Some DBMS (such as sqlite) may not support this feature. | CDbConnection |
setColumnCase() | Sets the case of the column names | CDbConnection |
setNullConversion() | Sets how the null and empty strings are converted | CDbConnection |
setPersistent() | Sets whether the connection is persistent or not Some DBMS (such as sqlite) may not support this feature. | CDbConnection |
Method | Description | Defined By |
---|---|---|
close() | Closes the currently active DB connection. | CDbConnection |
createPdoInstance() | Creates the PDO instance. | CDbConnection |
initConnection() | Initializes the open db connection. | CDbConnection |
open() | Opens DB connection if it is currently not | CDbConnection |
whether the DB connection is established
whether creating or updating a DB record will be automatically committed. Some DBMS (such as sqlite) may not support this feature.
whether the database connection should be automatically established the component is being initialized. Defaults to true. Note, this property is only effective when the CDbConnection object is used as an application component.
the charset used for database connection. The property is only used for MySQL and PostgreSQL databases. Defaults to null, meaning using default charset as specified by the database.
the version information of the DB driver
the case of the column names
Returns the SQL command builder for the current DB connection.
the status of the connection Some DBMS (such as sqlite) may not support this feature.
The Data Source Name, or DSN, contains the information required to connect to the database.
the currently active transaction. Null if no active transaction.
name of the DB driver
whether to turn on prepare emulation. Defaults to false, meaning PDO will use the native prepare support if available. For some databases (such as MySQL), this may need to be set true so that PDO can emulate the prepare support to bypass the buggy native prepare support. Note, this property is only effective for PHP 5.1.3 or above.
whether to log the values that are bound to a prepare SQL statement. Defaults to false. During development, you may consider setting this property to true so that parameter values bound to SQL statements are logged for debugging purpose. You should be aware that logging parameter values could be expensive and have significant impact on the performance of your application.
whether to enable profiling the SQL statements being executed. Defaults to false. This should be mainly enabled and used during development to find out the bottleneck of SQL executions.
Returns the ID of the last inserted row or sequence value.
how the null and empty strings are converted
the password for establishing DB connection. Defaults to empty string.
the PDO instance, null if the connection is not established yet
whether the connection is persistent or not Some DBMS (such as sqlite) may not support this feature.
whether the connection performs data prefetching
the database schema for the current connection
the ID of the cache application component that is used to cache the table metadata. Defaults to 'cache' which refers to the primary cache application component. Set this property to false if you want to disable caching table metadata.
number of seconds that table metadata can remain valid in cache. Use 0 or negative value to indicate not caching schema. If greater than 0 and the primary cache is enabled, the table metadata will be cached.
list of tables whose metadata should NOT be cached. Defaults to empty array.
the information of DBMS server
the version information of DBMS server
Returns the statistical results of SQL executions. The results returned include the number of SQL statements executed and the total time spent. In order to use this method, enableProfiling has to be set true.
timeout settings for the connection
the username for establishing DB connection. Defaults to empty string.
public void __construct(string $dsn='', string $username='', string $password='')
| ||
$dsn | string | The Data Source Name, or DSN, contains the information required to connect to the database. |
$username | string | The user name for the DSN string. |
$password | string | The password for the DSN string. |
public function __construct($dsn='',$username='',$password='')
{
$this->connectionString=$dsn;
$this->username=$username;
$this->password=$password;
}
Constructor. Note, the DB connection is not established when this connection instance is created. Set active property to true to establish the connection.
public void __sleep()
|
public function __sleep()
{
$this->close();
return array_keys(get_object_vars($this));
}
Close the connection when serializing.
public CDbTransaction beginTransaction()
| ||
{return} | CDbTransaction | the transaction initiated |
public function beginTransaction()
{
if($this->getActive())
{
$this->_pdo->beginTransaction();
return $this->_transaction=new CDbTransaction($this);
}
else
throw new CDbException(Yii::t('yii','CDbConnection is inactive and cannot perform any DB operations.'));
}
Starts a transaction.
protected void close()
|
protected function close()
{
Yii::trace('Closing DB connection','system.db.CDbConnection');
$this->_pdo=null;
$this->_active=false;
$this->_schema=null;
}
Closes the currently active DB connection. It does nothing if the connection is already closed.
public CDbCommand createCommand(string $sql)
| ||
$sql | string | SQL statement associated with the new command. |
{return} | CDbCommand | the DB command |
public function createCommand($sql)
{
if($this->getActive())
return new CDbCommand($this,$sql);
else
throw new CDbException(Yii::t('yii','CDbConnection is inactive and cannot perform any DB operations.'));
}
Creates a command for execution.
protected PDO createPdoInstance()
| ||
{return} | PDO | the pdo instance |
protected function createPdoInstance()
{
$pdoClass='PDO';
if(($pos=strpos($this->connectionString,':'))!==false)
{
$driver=strtolower(substr($this->connectionString,0,$pos));
if($driver==='mssql' || $driver==='dblib')
$pdoClass='CMssqlPdoAdapter';
}
return new $pdoClass($this->connectionString,$this->username,
$this->password,$this->_attributes);
}
Creates the PDO instance. When some functionalities are missing in the pdo driver, we may use an adapter class to provides them.
public boolean getActive()
| ||
{return} | boolean | whether the DB connection is established |
public function getActive()
{
return $this->_active;
}
public mixed getAttribute(int $name)
| ||
$name | int | the attribute to be queried |
{return} | mixed | the corresponding attribute information |
public function getAttribute($name)
{
if($this->getActive())
return $this->_pdo->getAttribute($name);
else
throw new CDbException(Yii::t('yii','CDbConnection is inactive and cannot perform any DB operations.'));
}
Obtains a specific DB connection attribute information.
public boolean getAutoCommit()
| ||
{return} | boolean | whether creating or updating a DB record will be automatically committed. Some DBMS (such as sqlite) may not support this feature. |
public function getAutoCommit()
{
return $this->getAttribute(PDO::ATTR_AUTOCOMMIT);
}
public static array getAvailableDrivers()
| ||
{return} | array | list of available PDO drivers |
public static function getAvailableDrivers()
{
return PDO::getAvailableDrivers();
}
public string getClientVersion()
| ||
{return} | string | the version information of the DB driver |
public function getClientVersion()
{
return $this->getAttribute(PDO::ATTR_CLIENT_VERSION);
}
public mixed getColumnCase()
| ||
{return} | mixed | the case of the column names |
public function getColumnCase()
{
return $this->getAttribute(PDO::ATTR_CASE);
}
public CDbCommandBuilder getCommandBuilder()
| ||
{return} | CDbCommandBuilder | the command builder |
public function getCommandBuilder()
{
return $this->getSchema()->getCommandBuilder();
}
Returns the SQL command builder for the current DB connection.
public string getConnectionStatus()
| ||
{return} | string | the status of the connection Some DBMS (such as sqlite) may not support this feature. |
public function getConnectionStatus()
{
return $this->getAttribute(PDO::ATTR_CONNECTION_STATUS);
}
public CDbTransaction getCurrentTransaction()
| ||
{return} | CDbTransaction | the currently active transaction. Null if no active transaction. |
public function getCurrentTransaction()
{
if($this->_transaction!==null)
{
if($this->_transaction->getActive())
return $this->_transaction;
}
return null;
}
public string getDriverName()
| ||
{return} | string | name of the DB driver |
public function getDriverName()
{
return $this->getAttribute(PDO::ATTR_DRIVER_NAME);
}
public string getLastInsertID(string $sequenceName='')
| ||
$sequenceName | string | name of the sequence object (required by some DBMS) |
{return} | string | the row ID of the last row inserted, or the last value retrieved from the sequence object |
public function getLastInsertID($sequenceName='')
{
if($this->getActive())
return $this->_pdo->lastInsertId($sequenceName);
else
throw new CDbException(Yii::t('yii','CDbConnection is inactive and cannot perform any DB operations.'));
}
Returns the ID of the last inserted row or sequence value.
public mixed getNullConversion()
| ||
{return} | mixed | how the null and empty strings are converted |
public function getNullConversion()
{
return $this->getAttribute(PDO::ATTR_ORACLE_NULLS);
}
public PDO getPdoInstance()
| ||
{return} | PDO | the PDO instance, null if the connection is not established yet |
public function getPdoInstance()
{
return $this->_pdo;
}
public integer getPdoType(string $type)
| ||
$type | string | The PHP type (obtained by gettype() call). |
{return} | integer | the corresponding PDO type |
public function getPdoType($type)
{
static $map=array
(
'boolean'=>PDO::PARAM_BOOL,
'integer'=>PDO::PARAM_INT,
'string'=>PDO::PARAM_STR,
'NULL'=>PDO::PARAM_NULL,
);
return isset($map[$type]) ? $map[$type] : PDO::PARAM_STR;
}
Determines the PDO type for the specified PHP type.
public boolean getPersistent()
| ||
{return} | boolean | whether the connection is persistent or not Some DBMS (such as sqlite) may not support this feature. |
public function getPersistent()
{
return $this->getAttribute(PDO::ATTR_PERSISTENT);
}
public boolean getPrefetch()
| ||
{return} | boolean | whether the connection performs data prefetching |
public function getPrefetch()
{
return $this->getAttribute(PDO::ATTR_PREFETCH);
}
public CDbSchema getSchema()
| ||
{return} | CDbSchema | the database schema for the current connection |
public function getSchema()
{
if($this->_schema!==null)
return $this->_schema;
else
{
if(!$this->getActive())
throw new CDbException(Yii::t('yii','CDbConnection is inactive and cannot perform any DB operations.'));
$driver=$this->getDriverName();
switch(strtolower($driver))
{
case 'pgsql': // PostgreSQL
return $this->_schema=new CPgsqlSchema($this);
case 'mysqli': // MySQL
case 'mysql':
return $this->_schema=new CMysqlSchema($this);
case 'sqlite': // sqlite 3
case 'sqlite2': // sqlite 2
return $this->_schema=new CSqliteSchema($this);
case 'mssql': // Mssql driver on windows hosts
case 'dblib': // dblib drivers on linux (and maybe others os) hosts
return $this->_schema=new CMssqlSchema($this);
case 'oci': // Oracle driver
return $this->_schema=new COciSchema($this);
case 'ibm':
default:
throw new CDbException(Yii::t('yii','CDbConnection does not support reading schema for {driver} database.',
array('{driver}'=>$driver)));
}
}
}
public string getServerInfo()
| ||
{return} | string | the information of DBMS server |
public function getServerInfo()
{
return $this->getAttribute(PDO::ATTR_SERVER_INFO);
}
public string getServerVersion()
| ||
{return} | string | the version information of DBMS server |
public function getServerVersion()
{
return $this->getAttribute(PDO::ATTR_SERVER_VERSION);
}
public array getStats()
| ||
{return} | array | the first element indicates the number of SQL statements executed, and the second element the total time spent in SQL execution. |
public function getStats()
{
$logger=Yii::getLogger();
$timings=$logger->getProfilingResults(null,'system.db.CDbCommand.query');
$count=count($timings);
$time=array_sum($timings);
$timings=$logger->getProfilingResults(null,'system.db.CDbCommand.execute');
$count+=count($timings);
$time+=array_sum($timings);
return array($count,$time);
}
Returns the statistical results of SQL executions. The results returned include the number of SQL statements executed and the total time spent. In order to use this method, enableProfiling has to be set true.
public int getTimeout()
| ||
{return} | int | timeout settings for the connection |
public function getTimeout()
{
return $this->getAttribute(PDO::ATTR_TIMEOUT);
}
public void init()
|
public function init()
{
parent::init();
if($this->autoConnect)
$this->setActive(true);
}
Initializes the component. This method is required by IApplicationComponent and is invoked by application when the CDbConnection is used as an application component. If you override this method, make sure to call the parent implementation so that the component can be marked as initialized.
protected void initConnection(PDO $pdo)
| ||
$pdo | PDO | the PDO instance |
protected function initConnection($pdo)
{
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if($this->emulatePrepare && constant('PDO::ATTR_EMULATE_PREPARES'))
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,true);
if($this->charset!==null)
{
if(strcasecmp($pdo->getAttribute(PDO::ATTR_DRIVER_NAME),'sqlite'))
$pdo->exec('SET NAMES '.$pdo->quote($this->charset));
}
}
Initializes the open db connection. This method is invoked right after the db connection is established. The default implementation is to set the charset for MySQL and PostgreSQL database connections.
protected void open()
|
protected function open()
{
if($this->_pdo===null)
{
if(empty($this->connectionString))
throw new CDbException(Yii::t('yii','CDbConnection.connectionString cannot be empty.'));
try
{
Yii::trace('Opening DB connection','system.db.CDbConnection');
$this->_pdo=$this->createPdoInstance();
$this->initConnection($this->_pdo);
$this->_active=true;
}
catch(PDOException $e)
{
throw new CDbException(Yii::t('yii','CDbConnection failed to open the DB connection: {error}',
array('{error}'=>$e->getMessage())));
}
}
}
Opens DB connection if it is currently not
public string quoteColumnName(string $name)
| ||
$name | string | column name |
{return} | string | the properly quoted column name |
public function quoteColumnName($name)
{
return $this->getSchema()->quoteColumnName($name);
}
Quotes a column name for use in a query.
public string quoteTableName(string $name)
| ||
$name | string | table name |
{return} | string | the properly quoted table name |
public function quoteTableName($name)
{
return $this->getSchema()->quoteTableName($name);
}
Quotes a table name for use in a query.
public string quoteValue(string $str)
| ||
$str | string | string to be quoted |
{return} | string | the properly quoted string |
public function quoteValue($str)
{
if($this->getActive())
return $this->_pdo->quote($str);
else
throw new CDbException(Yii::t('yii','CDbConnection is inactive and cannot perform any DB operations.'));
}
Quotes a string value for use in a query.
public void setActive(boolean $value)
| ||
$value | boolean | whether to open or close DB connection |
public function setActive($value)
{
if($value!=$this->_active)
{
if($value)
$this->open();
else
$this->close();
}
}
Open or close the DB connection.
public void setAttribute(int $name, mixed $value)
| ||
$name | int | the attribute to be set |
$value | mixed | the attribute value |
public function setAttribute($name,$value)
{
if($this->_pdo instanceof PDO)
$this->_pdo->setAttribute($name,$value);
else
$this->_attributes[$name]=$value;
}
Sets an attribute on the database connection.
public void setAutoCommit(boolean $value)
| ||
$value | boolean | whether creating or updating a DB record will be automatically committed. Some DBMS (such as sqlite) may not support this feature. |
public function setAutoCommit($value)
{
$this->setAttribute(PDO::ATTR_AUTOCOMMIT,$value);
}
public void setColumnCase(mixed $value)
| ||
$value | mixed | the case of the column names |
public function setColumnCase($value)
{
$this->setAttribute(PDO::ATTR_CASE,$value);
}
public void setNullConversion(mixed $value)
| ||
$value | mixed | how the null and empty strings are converted |
public function setNullConversion($value)
{
$this->setAttribute(PDO::ATTR_ORACLE_NULLS,$value);
}
public void setPersistent(boolean $value)
| ||
$value | boolean | whether the connection is persistent or not Some DBMS (such as sqlite) may not support this feature. |
public function setPersistent($value)
{
return $this->setAttribute(PDO::ATTR_PERSISTENT,$value);
}
Signup or Login in order to comment.