CDbConnection
包 | system.db |
---|---|
继承 | class CDbConnection » CApplicationComponent » CComponent |
实现 | IApplicationComponent |
源自 | 1.0 |
版本 | $Id: CDbConnection.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 | framework/db/CDbConnection.php |
CDbConnection与CDbCommand, CDbDataReader 和 CDbTransaction一起提供了根据 DBMS 通用 API 来访问数据功能。 它们是PDO PHP 扩展的简化。
要建立一个连接,在指定connectionString, username 和 password之后, 设置active为true,。
下面的例子显示了怎样创建一个CDbConnection实例和建立实际的连接: :
$connection=new CDbConnection($dsn,$username,$password); $connection->active=true;
在DB连接建立之后,可以执行一个像下面这样的 SQL 语句:
$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) ...
也能执行一个准备好的 SQL 语句,并绑定参数到准备好的 SQL:
$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(); }
CDbConnection也提供一套方法来支持设置和查询特定的DBMS属性, 例如 nullConversion。
因为CDbConnection实现了IApplicationComponent接口,它能被用作一个应用程序组件, 并在应用程序中进行配置。 如下:
array( 'components'=>array( 'db'=>array( 'class'=>'CDbConnection', 'connectionString'=>'sqlite:path/to/dbfile', ), ), )
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
active | boolean | 返回DB连接是否已经建立。 | CDbConnection |
attributes | array | 返回先前为数据库连接显式设置的属性。 | CDbConnection |
autoCommit | boolean | 返回是否创建或更新数据库记录将自动提交。 | CDbConnection |
autoConnect | boolean | 数据库是否应自动建立连接 此组件将被初始化。默认为true。注意,这个属性仅仅有效果当 CDbConnection对象被用作一个应用程序组件。 | CDbConnection |
behaviors | array | 这个应用组件附加的行为。 这此行为将在应用组件调用init时附加在应用组件上。 请参照CModel::behaviors如何指定此属性值。 | CApplicationComponent |
charset | string | 用于数据库连接charset字符串。这个属性仅仅用于
MySQL 和 PostgreSQL 数据库。默认为 null,
意味着使用此数据库指定的默认的charset。
注意如果你使用 GBK 或 BIG5 ,那么推荐更新到 PHP 5. |
CDbConnection |
clientVersion | string | 返回数据库驱动程序的版本信息。 | CDbConnection |
columnCase | mixed | 返回列名称的大小写情况 | CDbConnection |
commandBuilder | CDbCommandBuilder | 返回为当前DB连接的SQL命令生成器。 | CDbConnection |
connectionStatus | string | 返回连接的状态。 | CDbConnection |
connectionString | string | 数据源名称或 DSN,包含连接到数据库所需的信息。 | CDbConnection |
currentTransaction | CDbTransaction | 返回当前活动的事务。 | CDbConnection |
driverMap | array | PDO驱动程序和schema类名之间的映射。 使用路径别名指定一个 schema 类。 | CDbConnection |
driverName | string | 返回的数据库驱动程序的名称。 | CDbConnection |
emulatePrepare | boolean | 是否打开准备模拟。默认为 false, 意味着PDO将准备使用本地预备支持,如果可用。对于某些数据库 (如 MySQL), 这将需要设置为true 以至于 PDO 能模拟该预备支持 绕过buggy本地预备支持。注意,这个属性仅仅在PHP 5. | CDbConnection |
enableParamLogging | boolean | 是否记录的值绑定到一个准备的SQL语句。 默认为 false。在开发阶段,你应该考虑设置这个属性为true 以至于参数值能被绑定到SQL语句以记录用于高度目的。 你应该知道记录参数值代价是高昂的, 将很大程度影响你的应用程序的性能。 | CDbConnection |
enableProfiling | boolean | 正在执行的SQL语句是否启用分析。 默认为 false。这个主要 启用它主要用于开发阶段找出SQL执行的瓶颈。 | CDbConnection |
initSQLs | array | DB连接建立后执行的SQL语句列表。 | CDbConnection |
isInitialized | boolean | 检查应用组件是否已经初始化。 | CApplicationComponent |
lastInsertID | string | 返回最后一个插入的行的ID或序列值。 | CDbConnection |
nullConversion | mixed | 返回null与empty字符串如何转化的情况。 | CDbConnection |
password | string | 建立数据连接的密码。默认为空字符串。 | CDbConnection |
pdoClass | string | 自定义PDO封装类。 | CDbConnection |
pdoInstance | PDO | 返回PDO实例。 | CDbConnection |
persistent | boolean | 返回数据库连接是否持久的。 | CDbConnection |
prefetch | boolean | 返回数据库连接是否可执行数据预获取。 | CDbConnection |
queryCacheID | string | 缓存应用程序组件的ID,用于查询缓存。 默认为'cache',它指的是主缓存应用程序组件。 设置这个属性为false,如果你想禁用查询缓存。 | CDbConnection |
queryCachingCount | integer | 下次将被缓存的SQL语句的数目。 如果它是 0,即使查询缓存被启用,查询也不会被缓存。 注意每次执行一条SQL语句之后 (是否在DB服务器上执行或从查询缓存中获取), 这个属性将被减少1至0。 | CDbConnection |
queryCachingDependency | CCacheDependency | 当查询结果保存到缓存时,使用的依赖。 | CDbConnection |
queryCachingDuration | integer | 查询结果被保留在缓存中有效的秒数。 使用0或负数值指示不缓存查询结果 (默认 behavior). | CDbConnection |
schema | CDbSchema | 返回当前连接的数据库结构 | CDbConnection |
schemaCacheID | string | 缓存应用程序组件的ID,用于缓存表的元数据。 默认为'cache' 它指的是主缓存应用程序组件。 如果要禁用缓存表的元数据,此属性设置为false。 | CDbConnection |
schemaCachingDuration | integer | 数据表中元数据在缓存中保存的秒钟数。 使用0或负值指示不缓存schema。 如果大于0和正数,cache被启用,表的元数据将被缓存。 | CDbConnection |
schemaCachingExclude | array | 元数据不被缓存的列的列表。默认为空字符串。 | CDbConnection |
serverInfo | string | 返回DBMS服务器的信息。 | CDbConnection |
serverVersion | string | 返回DBMS服务器的版本信息。 | CDbConnection |
stats | array | 返回SQL执行的统计结果。 | CDbConnection |
tablePrefix | string | 表名称的默认前缀。默认为 null,意味着没有表前缀。 通过设置这个属性,任何标记像 '{{tableName}}' 在 CDbCommand::text 将 'prefixTableName'替换, 这里 'prefix' 指的是这个属性值。 | CDbConnection |
timeout | integer | 返回连接的超时设置。 | CDbConnection |
username | string | 建立数据连接的用户名。默认为空字符串。 | CDbConnection |
公共方法
方法 | 描述 | 定义在 |
---|---|---|
__call() | 如果类中没有调的方法名,则调用这个方法。 | CComponent |
__construct() | 构造函数。 | CDbConnection |
__get() | 返回一个属性值、一个事件处理程序列表或一个行为名称。 | CComponent |
__isset() | 检查一个属性是否为null。 | CComponent |
__set() | 设置一个组件的属性值。 | CComponent |
__sleep() | 序列化时关闭连接。 | CDbConnection |
__unset() | 设置一个组件的属性为null。 | CComponent |
asa() | 返回这个名字的行为对象。 | CComponent |
attachBehavior() | 附加一个行为到组件。 | CComponent |
attachBehaviors() | 附加一个行为列表到组件。 | CComponent |
attachEventHandler() | 为事件附加一个事件处理程序。 | CComponent |
beginTransaction() | 启动事务。 | CDbConnection |
cache() | 设置关于查询缓存的参数。 | CDbConnection |
canGetProperty() | 确定属性是否可读。 | CComponent |
canSetProperty() | 确定属性是否可写。 | CComponent |
createCommand() | 创建用于执行的命令。 | CDbConnection |
detachBehavior() | 从组件中分离一个行为。 | CComponent |
detachBehaviors() | 从组件中分离所有行为。 | CComponent |
detachEventHandler() | 分离一个存在的事件处理程序。 | CComponent |
disableBehavior() | 禁用一个附加行为。 | CComponent |
disableBehaviors() | 禁用组件附加的所有行为。 | CComponent |
enableBehavior() | 启用一个附加行为。 | CComponent |
enableBehaviors() | 启用组件附加的所有行为。 | CComponent |
evaluateExpression() | 计算一个PHP表达式,或根据组件上下文执行回调。 | CComponent |
getActive() | 返回DB连接是否已经建立。 | CDbConnection |
getAttribute() | 获取指定的数据库连接属性信息。 | CDbConnection |
getAttributes() | 返回先前为数据库连接显式设置的属性。 | CDbConnection |
getAutoCommit() | 返回是否创建或更新数据库记录将自动提交。 | CDbConnection |
getAvailableDrivers() | 返回一个可用的PDO驱动程序的列表。 | CDbConnection |
getClientVersion() | 返回数据库驱动程序的版本信息。 | CDbConnection |
getColumnCase() | 返回列名称的大小写情况 | CDbConnection |
getCommandBuilder() | 返回为当前DB连接的SQL命令生成器。 | CDbConnection |
getConnectionStatus() | 返回连接的状态。 | CDbConnection |
getCurrentTransaction() | 返回当前活动的事务。 | CDbConnection |
getDriverName() | 返回的数据库驱动程序的名称。 | CDbConnection |
getEventHandlers() | 返回一个事件的附加处理程序列表。 | CComponent |
getIsInitialized() | 检查应用组件是否已经初始化。 | CApplicationComponent |
getLastInsertID() | 返回最后一个插入的行的ID或序列值。 | CDbConnection |
getNullConversion() | 返回null与empty字符串如何转化的情况。 | CDbConnection |
getPdoInstance() | 返回PDO实例。 | CDbConnection |
getPdoType() | 指定的PHP数据类型决定PDO数据类型。 | CDbConnection |
getPersistent() | 返回数据库连接是否持久的。 | CDbConnection |
getPrefetch() | 返回数据库连接是否可执行数据预获取。 | CDbConnection |
getSchema() | 返回当前连接的数据库结构 | CDbConnection |
getServerInfo() | 返回DBMS服务器的信息。 | CDbConnection |
getServerVersion() | 返回DBMS服务器的版本信息。 | CDbConnection |
getStats() | 返回SQL执行的统计结果。 | CDbConnection |
getTimeout() | 返回连接的超时设置。 | CDbConnection |
hasEvent() | 确定一个事件是否定义。 | CComponent |
hasEventHandler() | 检查事件是否有附加的处理程序。 | CComponent |
hasProperty() | 确定属性是否被定义。 | CComponent |
init() | 初始化组件。 | CDbConnection |
quoteColumnName() | 在一个查询中引用一个列名称。 | CDbConnection |
quoteTableName() | 在一个查询中引用的表名。 | CDbConnection |
quoteValue() | 在一个查询中引用一个字符串值。 | CDbConnection |
raiseEvent() | 发起一个事件。 | CComponent |
setActive() | 打开或关闭DB连接。 | CDbConnection |
setAttribute() | 设置数据库连接上的一个属性。 | CDbConnection |
setAttributes() | 设置一套数据库连接的属性。 | CDbConnection |
setAutoCommit() | 设置是否创建或更新数据库记录将自动提交。 | CDbConnection |
setColumnCase() | 设置列名称的大小写。 | CDbConnection |
setNullConversion() | 设置null和empty 字符串如何转换。 | CDbConnection |
setPersistent() | 设置此连接是否是持久连接。 | CDbConnection |
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
close() | 关闭当前连接的数据库连接。 | CDbConnection |
createPdoInstance() | 创建一个 PDO 实例。 | CDbConnection |
initConnection() | 初始化开放数据库连接。 | CDbConnection |
open() | 打开数据库连接,如果它当前没有打开 | CDbConnection |
属性详细
返回DB连接是否已经建立。
返回先前为数据库连接显式设置的属性。
返回是否创建或更新数据库记录将自动提交。 某些 DBMS (如 sqlite) 可能不支持这个特征。
数据库是否应自动建立连接 此组件将被初始化。默认为true。注意,这个属性仅仅有效果当 CDbConnection对象被用作一个应用程序组件。
用于数据库连接charset字符串。这个属性仅仅用于
MySQL 和 PostgreSQL 数据库。默认为 null,
意味着使用此数据库指定的默认的charset。
注意如果你使用 GBK 或 BIG5 ,那么推荐更新到
PHP 5.3.6+和通过DSN指定 charset 像下面这样
'mysql:dbname=mydatabase;host=127.0.0.1;charset=GBK;'。
返回数据库驱动程序的版本信息。
返回列名称的大小写情况
返回为当前DB连接的SQL命令生成器。
返回连接的状态。 一些 DBMS (如 sqlite) 可能不支持这个特征。
数据源名称或 DSN,包含连接到数据库所需的信息。
返回当前活动的事务。
PDO驱动程序和schema类名之间的映射。 使用路径别名指定一个 schema 类。
返回的数据库驱动程序的名称。
是否打开准备模拟。默认为 false, 意味着PDO将准备使用本地预备支持,如果可用。对于某些数据库 (如 MySQL), 这将需要设置为true 以至于 PDO 能模拟该预备支持 绕过buggy本地预备支持。注意,这个属性仅仅在PHP 5.1.3及以上有效。 默认值为 null,这将不改变PDO的 ATTR_EMULATE_PREPARES 值。
是否记录的值绑定到一个准备的SQL语句。 默认为 false。在开发阶段,你应该考虑设置这个属性为true 以至于参数值能被绑定到SQL语句以记录用于高度目的。 你应该知道记录参数值代价是高昂的, 将很大程度影响你的应用程序的性能。
正在执行的SQL语句是否启用分析。 默认为 false。这个主要 启用它主要用于开发阶段找出SQL执行的瓶颈。
DB连接建立后执行的SQL语句列表。
返回最后一个插入的行的ID或序列值。
返回null与empty字符串如何转化的情况。
建立数据连接的密码。默认为空字符串。
自定义PDO封装类。
返回PDO实例。
返回数据库连接是否持久的。 某些 DBMS (如 sqlite) 可能不支持这个特征。
返回数据库连接是否可执行数据预获取。
缓存应用程序组件的ID,用于查询缓存。 默认为'cache',它指的是主缓存应用程序组件。 设置这个属性为false,如果你想禁用查询缓存。
下次将被缓存的SQL语句的数目。 如果它是 0,即使查询缓存被启用,查询也不会被缓存。 注意每次执行一条SQL语句之后 (是否在DB服务器上执行或从查询缓存中获取), 这个属性将被减少1至0。
当查询结果保存到缓存时,使用的依赖。
查询结果被保留在缓存中有效的秒数。
使用0或负数值指示不缓存查询结果 (默认 behavior).
为了启用查询缓存,这个属性必须被设置为正数。
并且 queryCacheID 必须指向一个有效的缓存组件 ID。
该方法cache() 提供一种方便的方法设置此属性
和 queryCachingDependency。
返回当前连接的数据库结构
缓存应用程序组件的ID,用于缓存表的元数据。 默认为'cache' 它指的是主缓存应用程序组件。 如果要禁用缓存表的元数据,此属性设置为false。
数据表中元数据在缓存中保存的秒钟数。 使用0或负值指示不缓存schema。 如果大于0和正数,cache被启用,表的元数据将被缓存。
元数据不被缓存的列的列表。默认为空字符串。
返回DBMS服务器的信息。
返回DBMS服务器的版本信息。
返回SQL执行的统计结果。 返回的结果包含执行SQL语句的数目和 所花费的总时间。 为了使用此方法,enableProfiling必须设置为 true。
表名称的默认前缀。默认为 null,意味着没有表前缀。 通过设置这个属性,任何标记像 '{{tableName}}' 在 CDbCommand::text 将 'prefixTableName'替换, 这里 'prefix' 指的是这个属性值。
返回连接的超时设置。
建立数据连接的用户名。默认为空字符串。
方法详细
public void __construct(string $dsn='', string $username='', string $password='')
| ||
$dsn | string | 数据源名称,或 DSN,包含连接到数据库所需的信息。 |
$username | string | DSN 字符串的用户名。 |
$password | string | DSN 字符串的密码。 |
public function __construct($dsn='',$username='',$password='')
{
$this->connectionString=$dsn;
$this->username=$username;
$this->password=$password;
}
构造函数。 注意,当连接实例创建的时候,并不会连接数据库。 设置 active 属性为true, 来建立此连接。
public array __sleep()
| ||
{return} | array |
public function __sleep()
{
$this->close();
return array_keys(get_object_vars($this));
}
序列化时关闭连接。
public CDbTransaction beginTransaction()
| ||
{return} | CDbTransaction | 返回事务启动 |
public function beginTransaction()
{
Yii::trace('Starting transaction','system.db.CDbConnection');
$this->setActive(true);
$this->_pdo->beginTransaction();
return $this->_transaction=new CDbTransaction($this);
}
启动事务。
public CDbConnection cache(integer $duration, CCacheDependency $dependency=NULL, integer $queryCount=1)
| ||
$duration | integer | 查询结果保持在缓存中有效的秒数。 如果它是0,缓存将被禁用。 |
$dependency | CCacheDependency | 当查询结果保存到缓存时,使用的依赖。 |
$queryCount | integer | 在调用此方法后,需要缓存的SQL查询的数目。 默认为 1,意味着下一条SQL查询将被缓存。 |
{return} | CDbConnection | 返回连接实例本身。 |
public function cache($duration, $dependency=null, $queryCount=1)
{
$this->queryCachingDuration=$duration;
$this->queryCachingDependency=$dependency;
$this->queryCachingCount=$queryCount;
return $this;
}
设置关于查询缓存的参数。 此方法可用于启用或禁用查询缓存。 通过设置$duration参数为0,查询缓存将被禁用。 要不然, 新的SQL语句执行的查询结果将被保存在缓存中, 并且在指定时间段内有效。 如果同样的查询再次执行,结果将直接从缓存中读取, 而不是执行实际的SQL语句。
protected void close()
|
protected function close()
{
Yii::trace('Closing DB connection','system.db.CDbConnection');
$this->_pdo=null;
$this->_active=false;
$this->_schema=null;
}
关闭当前连接的数据库连接。 如果连接已经关闭,它不执行任何操作。
public CDbCommand createCommand(mixed $query=NULL)
| ||
$query | mixed | 要执行的DB查询。这可以是一个字符串,表示一个SQL语句, 或一个数组,它表示SQL语句的不同片段。请参阅 CDbCommand::__construct 有关更多详细信息有关如何将数组作为查询。如果这个参数没有给定, 你必须调用查询生成器的 CDbCommand 方法去建立数据库查询。 |
{return} | CDbCommand | 数据库命令 |
public function createCommand($query=null)
{
$this->setActive(true);
return new CDbCommand($this,$query);
}
创建用于执行的命令。
protected PDO createPdoInstance()
| ||
{return} | PDO | 返回pdo实例 |
protected function createPdoInstance()
{
$pdoClass=$this->pdoClass;
if(($pos=strpos($this->connectionString,':'))!==false)
{
$driver=strtolower(substr($this->connectionString,0,$pos));
if($driver==='mssql' || $driver==='dblib' || $driver==='sqlsrv')
$pdoClass='CMssqlPdoAdapter';
}
return new $pdoClass($this->connectionString,$this->username,
$this->password,$this->_attributes);
}
创建一个 PDO 实例。 pdo驱动程序中缺少某些功能时, 我们可以使用一个适配器类,以提供它们。
public boolean getActive()
| ||
{return} | boolean | 返回DB连接是否已经建立 |
返回DB连接是否已经建立。
public mixed getAttribute(integer $name)
| ||
$name | integer | 要查询的属性。 |
{return} | mixed | 相应的属性信息 |
public function getAttribute($name)
{
$this->setActive(true);
return $this->_pdo->getAttribute($name);
}
获取指定的数据库连接属性信息。
public array getAttributes()
| ||
{return} | array | 返回先前为数据库连接显式设置的属性(name=>value)。 |
public function getAttributes()
{
return $this->_attributes;
}
返回先前为数据库连接显式设置的属性。
public boolean getAutoCommit()
| ||
{return} | boolean | 返回是否创建或更新DB记录将自动提交。 |
public function getAutoCommit()
{
return $this->getAttribute(PDO::ATTR_AUTOCOMMIT);
}
返回是否创建或更新数据库记录将自动提交。 某些 DBMS (如 sqlite) 可能不支持这个特征。
public static array getAvailableDrivers()
| ||
{return} | array | 返回一个可用的PDO驱动程序的列表 |
public static function getAvailableDrivers()
{
return PDO::getAvailableDrivers();
}
返回一个可用的PDO驱动程序的列表。
public string getClientVersion()
| ||
{return} | string | 返回数据库驱动程序的版本信息 |
public function getClientVersion()
{
return $this->getAttribute(PDO::ATTR_CLIENT_VERSION);
}
返回数据库驱动程序的版本信息。
public mixed getColumnCase()
| ||
{return} | mixed | 列的大小写情况 |
public function getColumnCase()
{
return $this->getAttribute(PDO::ATTR_CASE);
}
返回列名称的大小写情况
public CDbCommandBuilder getCommandBuilder()
| ||
{return} | CDbCommandBuilder | 返回此命令生成器 |
public function getCommandBuilder()
{
return $this->getSchema()->getCommandBuilder();
}
返回为当前DB连接的SQL命令生成器。
public string getConnectionStatus()
| ||
{return} | string | 返回连接的状态 |
public function getConnectionStatus()
{
return $this->getAttribute(PDO::ATTR_CONNECTION_STATUS);
}
返回连接的状态。 一些 DBMS (如 sqlite) 可能不支持这个特征。
public CDbTransaction getCurrentTransaction()
| ||
{return} | CDbTransaction | 返回当前活动的事务。如果没有活动事务返回null。 |
public function getCurrentTransaction()
{
if($this->_transaction!==null)
{
if($this->_transaction->getActive())
return $this->_transaction;
}
return null;
}
返回当前活动的事务。
public string getDriverName()
| ||
{return} | string | 返回的DB驱动程序的名称 |
public function getDriverName()
{
if(($pos=strpos($this->connectionString, ':'))!==false)
return strtolower(substr($this->connectionString, 0, $pos));
// return $this->getAttribute(PDO::ATTR_DRIVER_NAME);
}
返回的数据库驱动程序的名称。
public string getLastInsertID(string $sequenceName='')
| ||
$sequenceName | string | 序列对象的名称 (某些DBMS要求) |
{return} | string | 最后插入的行的 ID,或从序列对象中取回的最后的值。 |
public function getLastInsertID($sequenceName='')
{
$this->setActive(true);
return $this->_pdo->lastInsertId($sequenceName);
}
返回最后一个插入的行的ID或序列值。
public mixed getNullConversion()
| ||
{return} | mixed | 返回值说明null和空字符串是怎样转换的。 |
public function getNullConversion()
{
return $this->getAttribute(PDO::ATTR_ORACLE_NULLS);
}
返回null与empty字符串如何转化的情况。
public PDO getPdoInstance()
| ||
{return} | PDO | 返回PDO实例,如果连接还没有建立返回null |
返回PDO实例。
public integer getPdoType(string $type)
| ||
$type | string | PHP类型(通过调用gettype()获得)。 |
{return} | integer | 返回相应的PDO类型 |
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;
}
指定的PHP数据类型决定PDO数据类型。
public boolean getPersistent()
| ||
{return} | boolean | 返回连接是否是持久连接 |
public function getPersistent()
{
return $this->getAttribute(PDO::ATTR_PERSISTENT);
}
返回数据库连接是否持久的。 某些 DBMS (如 sqlite) 可能不支持这个特征。
public boolean getPrefetch()
| ||
{return} | boolean | 返回是否连接执行数据预读取 |
public function getPrefetch()
{
return $this->getAttribute(PDO::ATTR_PREFETCH);
}
返回数据库连接是否可执行数据预获取。
public CDbSchema getSchema()
| ||
{return} | CDbSchema | 当前连接的数据库结构 |
public function getSchema()
{
if($this->_schema!==null)
return $this->_schema;
else
{
$driver=$this->getDriverName();
if(isset($this->driverMap[$driver]))
return $this->_schema=Yii::createComponent($this->driverMap[$driver], $this);
else
throw new CDbException(Yii::t('yii','CDbConnection does not support reading schema for {driver} database.',
array('{driver}'=>$driver)));
}
}
返回当前连接的数据库结构
public string getServerInfo()
| ||
{return} | string | 返回DBMS服务器的信息。 |
public function getServerInfo()
{
return $this->getAttribute(PDO::ATTR_SERVER_INFO);
}
返回DBMS服务器的信息。
public string getServerVersion()
| ||
{return} | string | 返回DBMS服务器的版本信息。 |
public function getServerVersion()
{
return $this->getAttribute(PDO::ATTR_SERVER_VERSION);
}
返回DBMS服务器的版本信息。
public array getStats()
| ||
{return} | array | 返回的数组中第一个元素指示SQL语句执行的数目, 第二个元素指示SQL执行的总时间。 |
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);
}
返回SQL执行的统计结果。 返回的结果包含执行SQL语句的数目和 所花费的总时间。 为了使用此方法,enableProfiling必须设置为 true。
public integer getTimeout()
| ||
{return} | integer | 返回连接的超时设置。 |
public function getTimeout()
{
return $this->getAttribute(PDO::ATTR_TIMEOUT);
}
返回连接的超时设置。
public void init()
|
public function init()
{
parent::init();
if($this->autoConnect)
$this->setActive(true);
}
初始化组件。 该方法对IApplicationComponent 来说是必须的, 并且当 CDbConnection 被用作一个应用程序组件时触发。 如果你重写此方法,请确保调用父类实现 以便可以将组件标记为已初始化。
protected void initConnection(PDO $pdo)
| ||
$pdo | PDO | PDO实例 |
protected function initConnection($pdo)
{
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if($this->emulatePrepare!==null && constant('PDO::ATTR_EMULATE_PREPARES'))
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,$this->emulatePrepare);
if($this->charset!==null)
{
$driver=strtolower($pdo->getAttribute(PDO::ATTR_DRIVER_NAME));
if(in_array($driver,array('pgsql','mysql','mysqli')))
$pdo->exec('SET NAMES '.$pdo->quote($this->charset));
}
if($this->initSQLs!==null)
{
foreach($this->initSQLs as $sql)
$pdo->exec($sql);
}
}
初始化开放数据库连接。 在数据库连接建立后,调用此方法对。 默认的实现是设置MySQL和PostgreSQL数据库连接的charset。
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)
{
if(YII_DEBUG)
{
throw new CDbException(Yii::t('yii','CDbConnection failed to open the DB connection: {error}',
array('{error}'=>$e->getMessage())),(int)$e->getCode(),$e->errorInfo);
}
else
{
Yii::log($e->getMessage(),CLogger::LEVEL_ERROR,'exception.CDbException');
throw new CDbException(Yii::t('yii','CDbConnection failed to open the DB connection.'),(int)$e->getCode(),$e->errorInfo);
}
}
}
}
打开数据库连接,如果它当前没有打开
public string quoteColumnName(string $name)
| ||
$name | string | 列名 |
{return} | string | 正确引用的列名称 |
public function quoteColumnName($name)
{
return $this->getSchema()->quoteColumnName($name);
}
在一个查询中引用一个列名称。 如果该列名包含前缀,前缀也被恰当的引用。
public string quoteTableName(string $name)
| ||
$name | string | 表名 |
{return} | string | 正确引用的表名 |
public function quoteTableName($name)
{
return $this->getSchema()->quoteTableName($name);
}
在一个查询中引用的表名。 如果此表名包含schema 前缀,前缀也能被恰当的引用。
public string quoteValue(string $str)
| ||
$str | string | 被引用的字符串 |
{return} | string | 正确引用的字符串 |
public function quoteValue($str)
{
if(is_int($str) || is_float($str))
return $str;
$this->setActive(true);
if(($value=$this->_pdo->quote($str))!==false)
return $value;
else // the driver doesn't support quote (e.g. oci)
return "'" . addcslashes(str_replace("'", "''", $str), "\000\n\r\\\032") . "'";
}
在一个查询中引用一个字符串值。
public void setActive(boolean $value)
| ||
$value | boolean | 说明数据库连接是开启还是关闭。 |
public function setActive($value)
{
if($value!=$this->_active)
{
if($value)
$this->open();
else
$this->close();
}
}
打开或关闭DB连接。
public void setAttribute(integer $name, mixed $value)
| ||
$name | integer | 要设置的属性 |
$value | mixed | 属性值 |
public function setAttribute($name,$value)
{
if($this->_pdo instanceof PDO)
$this->_pdo->setAttribute($name,$value);
else
$this->_attributes[$name]=$value;
}
设置数据库连接上的一个属性。
public void setAttributes(array $values)
| ||
$values | array | 要被设置的属性(name=>value)。 |
public function setAttributes($values)
{
foreach($values as $name=>$value)
$this->_attributes[$name]=$value;
}
设置一套数据库连接的属性。
参见
public void setAutoCommit(boolean $value)
| ||
$value | boolean | 返回是否创建或更新DB记录将自动提交。 |
public function setAutoCommit($value)
{
$this->setAttribute(PDO::ATTR_AUTOCOMMIT,$value);
}
设置是否创建或更新数据库记录将自动提交。 某些 DBMS (如 sqlite) 可能不支持这个特征。
public void setColumnCase(mixed $value)
| ||
$value | mixed | 列名称的大小写 |
public function setColumnCase($value)
{
$this->setAttribute(PDO::ATTR_CASE,$value);
}
设置列名称的大小写。
public void setNullConversion(mixed $value)
| ||
$value | mixed | null和empty 字符串如何转换。 |
public function setNullConversion($value)
{
$this->setAttribute(PDO::ATTR_ORACLE_NULLS,$value);
}
设置null和empty 字符串如何转换。
public void setPersistent(boolean $value)
| ||
$value | boolean | 此连接是否是持久连接 |
public function setPersistent($value)
{
return $this->setAttribute(PDO::ATTR_PERSISTENT,$value);
}
设置此连接是否是持久连接。 某些 DBMS (如 sqlite) 可能不支持这个特征。